簡體   English   中英

Java中的outputstream出乎意料的結果

[英]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');

看到最后一行。

可能,寫一個新行\\n刷新流。

在第二個程序中,您不打印換行符,並且內容不會從流中刷新。 所以你看不到輸出。

請參閱: 何時/為何在Java中調用System.out.flush()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM