无法将System.out实例正确传递给FilterOutputStream

时间:2013-06-07 14:17:43

标签: java stream

为什么此代码不起作用,除非我取消注释System.out.print(" ");行?

3例:

    System.out.print(" ");导致outprint.write(var); 之后
  • h e l l o w o r lSystem.out.print(" ");之前
  • outprint.write(var);导致:h e l l o w o r l d
  • 没有System.out.print(" ");没有显示任何内容

总而言之,我确实将System.out实例(PrintStream)传递给out对象的FilterOutputStream属性(需要{{1} }})。


OutputStream

3 个答案:

答案 0 :(得分:7)

这是因为你必须手动调用outputstream.flush();(而不是System.out.print()

答案 1 :(得分:3)

无论你添加到流中的是什么都被缓冲但没有被刷新。如果没有该行,请尝试刷新输出流。

try {
    for (char var : lst_char) {        
        outputstream.write(var);    
    }
    outputstream.flush(); //flush it once you are done writing
} catch (IOException e) {
    e.printStackTrace();
}

答案 2 :(得分:0)

以下是为您更正的代码。使用flush()

public class CodeCesar {       
        FilterOutputStream outputstream = new FilterOutputStream(System.out);
        String line = "hello world";
        char[] lst_char = line.toCharArray();
        for (char var : lst_char) {
            try {
                System.out.print(" ");
                outputstream.write(var);
                outputstream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}