aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMohan Embar <gnustuff@thisiscool.com>2004-01-30 06:33:43 +0000
committerMohan Embar <membar@gcc.gnu.org>2004-01-30 06:33:43 +0000
commitae30b3b25d4ec2a0cc1eff88ffcafd726f9cbe7a (patch)
treef57a095d33f60f3fd7a5ada51e038edd80f676f8 /libjava
parenteadccbea1257934ae7446a921cdb1c12431b8f58 (diff)
downloadgcc-ae30b3b25d4ec2a0cc1eff88ffcafd726f9cbe7a.zip
gcc-ae30b3b25d4ec2a0cc1eff88ffcafd726f9cbe7a.tar.gz
gcc-ae30b3b25d4ec2a0cc1eff88ffcafd726f9cbe7a.tar.bz2
BufferedReader.java (sbuf): New field.
* java/io/BufferedReader.java (sbuf): New field. (readLine): Use String.valueOf instead of new String() as per Per Bothner's suggestion. Use instance sbuf field instead of a local StringBuffer instance. * java/io/InputStreamReader.java (read(char[],int,int)): Pass the caller's buffer to refill(). (read(void)): Pass our internal work buffer to refill if our input queue is empty. (refill): Changed return type to int. Use the specified buffer instead of our work buffer as per Bryce McKinlay's suggestion. Return the number of characters read or -1 for EOF. From-SVN: r76927
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog14
-rw-r--r--libjava/java/io/BufferedReader.java14
-rw-r--r--libjava/java/io/InputStreamReader.java38
3 files changed, 41 insertions, 25 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 128f660..aa6242f 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,17 @@
+2004-01-29 Mohan Embar <gnustuff@thisiscool.com>
+
+ * java/io/BufferedReader.java (sbuf): New field.
+ (readLine): Use String.valueOf instead of new String() as per
+ Per Bothner's suggestion. Use instance sbuf field instead of a
+ local StringBuffer instance.
+ * java/io/InputStreamReader.java (read(char[],int,int)): Pass the
+ caller's buffer to refill().
+ (read(void)): Pass our internal work buffer to refill if our
+ input queue is empty.
+ (refill): Changed return type to int. Use the specified buffer
+ instead of our work buffer as per Bryce McKinlay's suggestion.
+ Return the number of characters read or -1 for EOF.
+
2004-01-29 Scott Gilbertson <scottg@mantatest.com>
* gnu/awt/xlib/XCanvasPeer.java (handleEvent): Implemented.
diff --git a/libjava/java/io/BufferedReader.java b/libjava/java/io/BufferedReader.java
index e29c8dd..1bc0dcf 100644
--- a/libjava/java/io/BufferedReader.java
+++ b/libjava/java/io/BufferedReader.java
@@ -1,5 +1,5 @@
/* BufferedReader.java
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -89,6 +89,11 @@ public class BufferedReader extends Reader
static final int DEFAULT_BUFFER_SIZE = 8192;
/**
+ * The line buffer for <code>readLine</code>.
+ */
+ private StringBuffer sbuf = null;
+
+ /**
* Create a new <code>BufferedReader</code> that will read from the
* specified subordinate stream with a default buffer size of 8192 chars.
*
@@ -439,7 +444,7 @@ public class BufferedReader extends Reader
int i = lineEnd(limit);
if (i < limit)
{
- String str = new String(buffer, pos, i - pos);
+ String str = String.valueOf(buffer, pos, i - pos);
pos = i + 1;
// If the last char in the buffer is a '\r', we must remember
// to check if the next char to be read after the buffer is refilled
@@ -450,7 +455,10 @@ public class BufferedReader extends Reader
pos++;
return str;
}
- StringBuffer sbuf = new StringBuffer(200);
+ if (sbuf == null)
+ sbuf = new StringBuffer(200);
+ else
+ sbuf.setLength(0);
sbuf.append(buffer, pos, i - pos);
pos = i;
// We only want to return null when no characters were read before
diff --git a/libjava/java/io/InputStreamReader.java b/libjava/java/io/InputStreamReader.java
index 05ed5fe..07be132 100644
--- a/libjava/java/io/InputStreamReader.java
+++ b/libjava/java/io/InputStreamReader.java
@@ -1,5 +1,5 @@
/* InputStreamReader.java -- Reader than transforms bytes to chars
- Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -231,10 +231,8 @@ public class InputStreamReader extends Reader
int wavail = wcount - wpos;
if (wavail <= 0)
{
- // Nothing waiting, so refill our buffer.
- if (! refill ())
- return -1;
- wavail = wcount - wpos;
+ // Nothing waiting, so refill their buffer.
+ return refill(buf, offset, length);
}
if (length > wavail)
@@ -262,24 +260,24 @@ public class InputStreamReader extends Reader
int wavail = wcount - wpos;
if (wavail <= 0)
{
- // Nothing waiting, so refill our buffer.
- if (! refill ())
+ // Nothing waiting, so refill our internal buffer.
+ wpos = wcount = 0;
+ if (work == null)
+ work = new char[100];
+ int count = refill(work, 0, work.length);
+ if (count == -1)
return -1;
+ wcount += count;
}
return work[wpos++];
}
}
- // Read more bytes and convert them into the WORK buffer.
- // Return false on EOF.
- private boolean refill () throws IOException
+ // Read more bytes and convert them into the specified buffer.
+ // Returns the number of converted characters or -1 on EOF.
+ private int refill(char[] buf, int offset, int length) throws IOException
{
- wcount = wpos = 0;
-
- if (work == null)
- work = new char[100];
-
for (;;)
{
// We have knowledge of the internals of BufferedInputStream
@@ -290,17 +288,13 @@ public class InputStreamReader extends Reader
boolean r = in.pos < in.count || in.refill ();
in.reset ();
if (! r)
- return false;
+ return -1;
converter.setInput(in.buf, in.pos, in.count);
- int count = converter.read (work, wpos, work.length - wpos);
+ int count = converter.read(buf, offset, length);
in.skip(converter.inpos - in.pos);
if (count > 0)
- {
- wcount += count;
- return true;
- }
+ return count;
}
}
-
} // class InputStreamReader