2013-04-11 42 views
0

FileInputStream的讀取方法每次讀取1個字節,但是它正在讀取文件中的字符,因爲java中的字符大小是(16位-2字節)。是否因爲讀取方法是原生的,它會轉換爲8位?通過文件IO操作讀取一個字節

+0

你的問題很不清楚。 「誰在閱讀文件中的人物」是什麼意思?請注意,僅僅因爲Java中char的內部表示是16位,並不意味着它在二進制編碼表示中總是16位。另請注意,FileInputStream是關於讀*字節*,而不是*字符*。 – 2013-04-11 06:05:21

+0

如果您想閱讀字符,可以使用[Reader.read()](http://docs.oracle.com/javase/6/docs/api/java/io/Reader.html#read()) – 2013-04-11 06:07:09

+0

文件只包含一個字節流。你可以將它們組合成字符,int,long,double或任何更大的類型,但是如何做到這一點真的取決於你。注意:編碼時,char可以使用1,2或3個字節。 – 2013-04-11 07:25:46

回答

2

read方法FileInputStream閱讀器返回一個int(相當於一個byte),而不是一個字符。將結果轉換爲角色是你的責任。

由於javadoc的FileInputStream建議:「用於讀取字符流,請考慮使用FileReader」。

字符編碼的字節數取決於文件的編碼。例如,如果文件使用ASCII進行編碼,則每個字節都是一個字符,但是如果您的文件使用UTF-8編碼,則一個字符的長度爲1,2,3或4個字節。

如果您想了解更多關於編碼的信息,我建議您閱讀以下文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)