a Java io question -- disable line buffering of PrintStream

W

www

Hi,

I am reading Sun's tutorial
page.(http://java.sun.com/developer/technicalArticles/Programming/PerfTuning/)

<Quote>
....
Another aspect of buffering concerns text output to a terminal window.
By default, System.out (a PrintStream) is line buffered, meaning that
the output buffer is flushed when a newline character is encountered.
This is important for interactivity, where you'd like to have an input
prompt displayed before actually entering any input.
Approach 5: Disabling Line Buffering

But line buffering can be disabled, as in this example:



import java.io.*;

public class bufout {
public static void main(String args[]) {
FileOutputStream fdout =
new FileOutputStream(FileDescriptor.out);
BufferedOutputStream bos =
new BufferedOutputStream(fdout, 1024);
PrintStream ps =
new PrintStream(bos, false);

System.setOut(ps);

final int N = 100000;

for (int i = 1; i <= N; i++)
System.out.println(i);

ps.close();
}
}


This program writes the integers 1..100000 to the output, and runs about
three times faster than the default equivalent that has line buffering
enabled.
</Quote>

The above code really bring me to trouble. Particularly, ps.close() does
strange thing. It seems to shut down my JVM or other similar end result.
All the code after ps.close() will not be reached. For example, I have
added the code:


ps.close()
System.setOut(System.out);
System.out.println("hello"); //never reach here

Thank you for your help.
 
W

www

www said:
For example, I have
added the code:


ps.close()
System.setOut(System.out);
System.out.println("hello"); //never reach here


Sorry. I already found the clause. I need to store System.out in a
temporary holder, then later put it back:

PrintStream temp = System.out;
System.setOut(ps);

final int N = 100000;

for (int i = 1; i <= N; i++)
System.out.println(i);

ps.close();
System.setOut(temp); //gets back the original PrintStream
System.out.println("Are you ok?"); //now it is printed out
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,736
Latest member
zacharyharris

Latest Threads

Top