a Java io question -- disable line buffering of PrintStream

Discussion in 'Java' started by www, Jan 30, 2007.

  1. www

    www Guest

    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.
    www, Jan 30, 2007
    #1
    1. Advertising

  2. www

    www Guest

    www wrote:
    > 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
    www, Jan 30, 2007
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Novice
    Replies:
    1
    Views:
    1,146
    Mike Schilling
    Jul 19, 2003
  2. Harald Hein

    Re: PrintStream to Writer

    Harald Hein, Aug 20, 2003, in forum: Java
    Replies:
    2
    Views:
    5,383
    karl wettin
    Aug 20, 2003
  3. Mathias Herrmann

    disable stdout buffering ?

    Mathias Herrmann, Oct 4, 2005, in forum: C Programming
    Replies:
    7
    Views:
    735
    Michael Wojcik
    Oct 4, 2005
  4. Evol
    Replies:
    5
    Views:
    389
  5. Lawrence D'Oliveiro

    Where Do PrintStream Exceptions Go?

    Lawrence D'Oliveiro, Mar 28, 2011, in forum: Java
    Replies:
    4
    Views:
    361
    javax.swing.JSnarker
    Mar 28, 2011
Loading...

Share This Page