java - PrintWriter/PrintStream 是否需要刷新?

标签 java printstream

我想使用 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/

相关文章:

java - 如何回滚android sqlite数据库中已删除的行?

Java强制捕获RuntimeException?

java - jsp中执行对象方法

java - 如何将自定义 View 膨胀为本身?

java - 在交付单个 jar 并使用反射时,如何避免在命令行中指定完全限定的类名?

java - 将minecraft的打印流重定向到JTextArea

java - 为什么我们不使用后关闭 `System.out` Stream 呢?

java - 为什么 PrintStream.close() 最终会被调用两次?

java - Android-从 java 运行 php 脚本

java - "Cannot be applied to given types"打印流期间出错