我正在尝试一个简单的程序来打印字符。当我这样做时:
import java.io.*;
public class listit {
public static void main(String[] args) {
for (int i = 32; i < 127; i++) {
System.out.write(i);
// break line after every eight characters.
if (i % 8 == 7) System.out.write('\n');
else System.out.write('\t');
}
System.out.write('\n');
}
}
我收到了预期的结果,即打印出ASCII字符集的可打印子集。但是,当我尝试类似的东西时:
import java.io.*;
public class listit {
public static void main(String[] args) {
int i = 122;
System.out.write(i);
}
}
我根本没有输出,而我期待 z 。如果没有循环,这个程序与上面的程序有什么不同?
答案 0 :(得分:6)
PrintStream支持在换行符上自动刷新或刷新。
System.out已启用自动刷新功能,但对于System.out.write('A'),只有在写入换行符时才会自动刷新。注意:如果你做System.out.write(“A”.getByte())将自动刷新。
PrintStream.write(int)的Javadoc声明
将指定的字节写入此流。如果该字节是换行符和 启用自动刷新,然后
flush
方法将启用 调用
这意味着你需要自动刷新并写一个换行符。
注意:PrintStream.print(char)状态
这些字节的写入方式与write(int)方法完全相同。
这并不清楚冲洗是不同的。 如果你有自动刷新或写一个新行,它将刷新。
System.out.print('a');
System.out.write('b');
仅打印
a
我怀疑这种不一致是一个长期存在的错误,而不是一个功能(换句话说,它不会被修复)。 ;)
这意味着您必须
System.out.flush();
或
System.out.write('\n');
查看最后一行。
答案 1 :(得分:1)
可能写一个新行\n
会刷新流。
在第二个程序中,您没有打印换行符,并且内容不会从流中刷新。所以你看不到输出。