我正在尝试一个简单的程序来打印字符.当我这样做:
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');
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果,即打印出ASCII字符集的可打印子集.但是,当我尝试类似的东西时:
import java.io.*;
public class listit {
public static void main(String[] args) {
int i = 122;
System.out.write(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我完全没有输出,而我期待z.如果没有循环,这个程序与上面的程序有什么不同?
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');
Run Code Online (Sandbox Code Playgroud)
只打印
a
Run Code Online (Sandbox Code Playgroud)
我怀疑这种不一致是一个长期存在的错误,而不是一个功能(换句话说,它不会被修复).;)
这意味着你必须要么
System.out.flush();
Run Code Online (Sandbox Code Playgroud)
要么
System.out.write('\n');
Run Code Online (Sandbox Code Playgroud)
看到最后一行.
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |