aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@mckinlay.net.nz>2003-08-10 02:53:17 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2003-08-10 03:53:17 +0100
commitb63853f9fd9cc94ebcfcfd908f82384a83641638 (patch)
treefa9364795f38b5bc6f0e8a62faa6651caa3aa516 /libjava/java
parent62515d696d9318ffa6528e61de850ea443e91d81 (diff)
downloadgcc-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.java41
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