4

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

3个案例:

  • System.out.print(" ");结果后outprint.write(var);h e l l o w o r l
  • System.out.print(" ");结果之前outprint.write(var);h e l l o w o r l d
  • System.out.print(" ");显示任何内容

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


import java.io.FilterOutputStream;
import java.io.IOException;

public class CodeCesar {

    public static void main(String[] args) {        
        FilterOutputStream outputstream = new FilterOutputStream(System.out);
        String line = "hello world";
        char[] lst_char = line.toCharArray();

        for (char var : lst_char) {
            try {
                outputstream.write(var);
                System.out.print(" "); <--------- THIS LINE
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
4

3 回答 3

7

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

于 2013-06-07T14:21:50.483 回答
3

您添加到流中的任何内容都将被缓冲但不会被刷新。如果没有该行,请尝试刷新输出流。

try {
    for (char var : lst_char) {        
        outputstream.write(var);    
    }
    outputstream.flush(); //flush it once you are done writing
} catch (IOException e) {
    e.printStackTrace();
}
于 2013-06-07T14:21:57.080 回答
0

这是为您提供的更正代码。使用冲洗()

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();
            }
        }
    }
}
于 2013-06-07T14:27:32.030 回答