2012-10-12 55 views
1

我已閱讀約FileInputStream,我發現它具有讀取方法,它將讀取文件的字節數據。文件輸入流中讀取方法中使用的字節數據類型

我想知道的是它讀取什麼類型的字節數據?含義是否使用ASCII或Unicode或任何其他類型?

+1

它只是讀取字節,不管它是什麼。對於你的情況,你應該使用StreamReader類。您可以在構造函數中指定編碼。當它讀取一個字節時,它會使用指定的方案將它們轉換爲Unicode,並在寫入操作期間使用相同的方案將其返回。 – krammer

回答

1

我想知道什麼類型的字節數據它讀取?意思是它使用ASCII還是Unicode或其他類型?

FileInputStream及其方法而言,只有一個「類型」的數據。那種類型是「一個字節序列(或八位字節)」。

其他任何「類型」都是針對另一個庫(或應用程序代碼)層來處理的。

您稱爲ASCII和Unicode的「類型」是字符編碼(粗略地說)。 (事實上​​,Unicode根本就不是一種編碼......並且在這種情況下並不完全有意義。Unicode的編碼具有諸如「UTF-8」和「UTF-16」等名稱 - 請參閱http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings。)

無論如何,文本文件類型(即某些標準字符編碼方案中的字符序列)「處理」的標準方法是使用Reader類。還有一個名爲InputStreamReader的包裝類,專門用於讀取InputStream中的字符數據。

數據的其他非文本「類型」由類如ZipInputStream,InflaterInputStream,GZIPInputStream,圖像讀取器類等處理。

0

它不改變文件編碼。如果你想在所希望的編碼字節[]解碼,可以使用charset在如下所需的字符集轉換:

Charset cs = Charset.forName("UTF-8"); // breaks too 
    String convertedString= new String(byteArray, cs);  
1

FileInputStream是一個二進制I/O類。它的文本I/O需要從Unicode轉換爲文件特定的編碼,反之亦然,但二進制I/O不需要任何轉換。當您從文件讀取一個字節時,返回原始字節。

相關問題