是否需要刷新PrintWriter / PrintStream?

时间:2012-05-17 17:16:59

标签: java printstream

我想使用PrintWriter或PrintStream将格式化的字符串写入输出流(我无法控制创建)。但是,刷新底层的OutputStream会有很大的性能损失。

是否需要刷新PrintWriter / PrintStream。

如果我需要刷新PrintStream / PrintWriter;我是否可以在不刷新底层OutputStream的情况下这样做,或者我是否需要创建一个" flush protecter" OutputStream包装底层流?

为了更清楚一点,我想实现

 public void writeSomeString(OutputStream foo);

但是对于相同的OutputStream(foo),可以多次调用此方法。每次调用都必须构建自己的PrintWriter。我知道这样做很难看但我无法控制界面或foo的创建。

我试图避免每个方法必须刷新foo只是为了刷新自己的PrintWriter / PrintStream。

所以我想:

public void writeSomeString(OutputStream foo) {
    PrintStream s = new PrintStream(foo);
    s.println("bar");
    // other code
}

我想完全避免使用此方法刷新foo

1 个答案:

答案 0 :(得分:2)

需要在以下条件下刷新PrintWriter:

ServerSocket s = new ServerSocket(4444);

Socket incoming = s.accept();

OutputStream output = s.getOutputStream();

PrintWriter pw = new PrintWriter(output,true);

System.out.println(pw.write(new Scanner(System.in).nextLine()));

PrintWriter构造函数中的第二个参数是flush,它接受布尔数据类型,我们需要刷新数据,因此即使缓冲区未满,它也会被抛出到控制台上。