2

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

4

1 回答 1

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

于 2012-05-17T18:13:25.627 回答