2012-05-17 27 views
2

我想使用PrintWriter或PrintStream将格式化的字符串写入输出流(为此我无法控制创建)。然而,冲洗底层的OutputStream有很大的性能影响。是否需要刷新PrintWriter/PrintStream?

难道一个PrintWriter/PrintStream的需要被刷新。

如果我需要刷新的PrintStream/PrintWriter的;我是否可以在不清除底层OutputStream的情况下执行此操作,或者是否需要创建“flush flush”OutputStream来封装基础流?

要尽量在此我想要实现

public void writeSomeString(OutputStream foo); 

更清晰一点,但这种方法可能会被调用相同的OutputStream(富)多次。每个电话都必须构建自己的PrintWriter。我知道这样做很难,但我无法控制界面或创建foo

我试图避免冲洗foo刚刚刷新了自己的PrintWriter/PrintStream的每个方法。

所以我想:

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

我想完全避免这种方法冲洗foo

回答

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,我们需要刷新数据,所以它被抛出在控制台上,即使缓冲区未满。

+0

是的,我想我将不得不冲洗它。我将包装输入流以防止它冲洗底层的OutputStream。谢谢。 –

+0

不客气! –