diff options
author | Bryce McKinlay <bryce@mckinlay.net.nz> | 2003-08-10 02:53:17 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2003-08-10 03:53:17 +0100 |
commit | b63853f9fd9cc94ebcfcfd908f82384a83641638 (patch) | |
tree | fa9364795f38b5bc6f0e8a62faa6651caa3aa516 /libjava/java | |
parent | 62515d696d9318ffa6528e61de850ea443e91d81 (diff) | |
download | gcc-b63853f9fd9cc94ebcfcfd908f82384a83641638.zip gcc-b63853f9fd9cc94ebcfcfd908f82384a83641638.tar.gz gcc-b63853f9fd9cc94ebcfcfd908f82384a83641638.tar.bz2 |
re PR libgcj/11778 (System.out PrintStream does too much buffering)
* java/io/PrintStream.java (print): Always flush if auto_flush is
set. Don't check for newline characters.
(write (int)): Implement without using a temporary array.
(write (byte[], int, int): Always flush if auto_flush is set. Don't
check for newline characters.
Fixes PR libgcj/11778.
From-SVN: r70284
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/io/PrintStream.java | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/libjava/java/io/PrintStream.java b/libjava/java/io/PrintStream.java index 8366852..d2a2117 100644 --- a/libjava/java/io/PrintStream.java +++ b/libjava/java/io/PrintStream.java @@ -95,7 +95,9 @@ public class PrintStream extends FilterOutputStream * This method intializes a new <code>PrintStream</code> object to write * to the specified output sink. This constructor also allows "auto-flush" * functionality to be specified where the stream will be flushed after - * every line is terminated or newline character is written. + * every <code>print</code> or <code>println</code> call, when the + * <code>write</code> methods with array arguments are called, or when a + * single new-line character is written. * <p> * * @param out The <code>OutputStream</code> to write to. @@ -114,7 +116,9 @@ public class PrintStream extends FilterOutputStream * This method intializes a new <code>PrintStream</code> object to write * to the specified output sink. This constructor also allows "auto-flush" * functionality to be specified where the stream will be flushed after - * every line is terminated or newline character is written. + * every <code>print</code> or <code>println</code> call, when the + * <code>write</code> methods with array arguments are called, or when a + * single new-line character is written. * <p> * * @param out The <code>OutputStream</code> to write to. @@ -256,10 +260,8 @@ public class PrintStream extends FilterOutputStream { pw.print (str); - if (str != null && auto_flush) - if ((str.indexOf ('\r') != -1) - || (str.indexOf ('\n') != -1)) - flush (); + if (auto_flush) + flush (); } /** @@ -422,9 +424,21 @@ public class PrintStream extends FilterOutputStream */ public void write (int oneByte) { - byte[] data = new byte [1]; - data [0] = (byte) (oneByte & 0xff); - write (data, 0, 1); + // We actually have to implement this method. Flush first so that + // things get written in the right order. + flush(); + + try + { + out.write (oneByte & 0xff); + + if (auto_flush && (oneByte == '\n')) + flush (); + } + catch (IOException e) + { + setError (); + } } /** @@ -446,19 +460,12 @@ public class PrintStream extends FilterOutputStream out.write (buffer, offset, len); if (auto_flush) - for (int i = offset; i < len; i++) - if ((buffer [i] == '\r') - || (buffer [i] == '\n')) - { - flush (); - break; - } + flush (); } catch (IOException e) { setError (); } } - } // class PrintStream |