我想使用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
答案 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,它接受布尔数据类型,我们需要刷新数据,因此即使缓冲区未满,它也会被抛出到控制台上。