2015-09-27 23 views

回答

1

我們所犯的一個明顯的錯誤是,當我們在上面看到這樣的文檔/教程時,System.in/out/err如何處理字節數組,以及我們假定,一個字節是一個字符。

想到這樣,字節是隻是0/1值的8位和有一個char 類型,這實際上是字符由兩個字節。即16位。

Oracle doc: Java primitives


那麼如何做System.in/out/err涉及字節?

的事情是他們喜歡InputStreamOutputStream類的implementaion的,使用這些API /實現的服務隊,我們將看到實際字符讀/寫上我們的控制檯。

基本上他們使用CharsetEncoder apis來實現這些事情。按照該文件,

/** 
* An engine that can transform a sequence of sixteen-bit Unicode characters 
* into a sequence of bytes in a specific charset. 
* ... ... 
*/ 
public abstract class CharsetEncoder 

還要檢查這個文檔,它解釋了unicode是如何在Java中處理。

+0

感謝您的回答。我一直認爲這些字節流遵循一些自動的16位Unicode到8位Ascii轉換來顯示控制檯中的字符。我會閱讀你建議我的unicode文檔。 – Birendra

+1

沒問題。另外閱讀'CharsetEncoder' JavaDoc,你可能會得到更多的清晰。 – rajuGT