我想使用 PrintWriter 或 PrintStream 将格式化字符串写入输出流(我无法控制其创建)。然而,刷新底层 OutputStream 会对性能造成很大影响。
PrintWriter/PrintStream 是否需要刷新。
如果我需要刷新PrintStream/PrintWriter;我可以在不刷新底层 OutputStream 的情况下执行此操作,还是需要创建一个“刷新保护器”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
最佳答案
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,它接受 boolean 数据类型,我们需要刷新数据,因此即使缓冲区未满,它也会被抛出到控制台上。
关于java - PrintWriter/PrintStream 是否需要刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640360/