[英]Unexpected result with outputstream in Java
我正在嘗試一個簡單的程序來打印字符。 當我這樣做:
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 。 如果沒有循環,這個程序與上面的程序有什么不同?
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');
看到最后一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.