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
This commit is contained in:
Bryce McKinlay 2003-08-10 02:53:17 +00:00 committed by Bryce McKinlay
parent 62515d696d
commit b63853f9fd
2 changed files with 33 additions and 17 deletions

View file

@ -1,3 +1,12 @@
2003-08-10 Bryce McKinlay <bryce@mckinlay.net.nz>
* 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.
2003-08-08 Andrew Haley <aph@redhat.com>
* Makefile.am (AM_CXXFLAGS): Define BOOT_CLASS_PATH.

View file

@ -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