3

我正在尝试一个简单的程序来打印字符。当我这样做时:

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时,我根本没有得到任何输出。这个程序与上面的程序有什么不同,除了没有循环吗?

4

2 回答 2

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');

看到最后一行。

于 2013-01-08T11:20:04.327 回答
1

可能,写一个新行\n会刷新流。

在第二个程序中,您没有打印换行符,并且内容不会从流中刷新。所以你看不到输出。

请参阅:何时/为什么在 Java 中调用 System.out.flush()

于 2013-01-08T11:22:37.997 回答