From ae30b3b25d4ec2a0cc1eff88ffcafd726f9cbe7a Mon Sep 17 00:00:00 2001 From: Mohan Embar Date: Fri, 30 Jan 2004 06:33:43 +0000 Subject: [PATCH] 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 --- libjava/ChangeLog | 14 ++++++++++ libjava/java/io/BufferedReader.java | 14 ++++++++-- libjava/java/io/InputStreamReader.java | 38 +++++++++++--------------- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 128f660522d..aa6242fca36 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,17 @@ +2004-01-29 Mohan Embar + + * 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 * gnu/awt/xlib/XCanvasPeer.java (handleEvent): Implemented. diff --git a/libjava/java/io/BufferedReader.java b/libjava/java/io/BufferedReader.java index e29c8dd8844..1bc0dcf7994 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. @@ -88,6 +88,11 @@ public class BufferedReader extends Reader // This is package-private because it is used by LineNumberReader. static final int DEFAULT_BUFFER_SIZE = 8192; + /** + * The line buffer for readLine. + */ + private StringBuffer sbuf = null; + /** * Create a new BufferedReader 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 05ed5fe2287..07be132510b 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 -- 2.30.2