我已閱讀約FileInputStream
,我發現它具有讀取方法,它將讀取文件的字節數據。文件輸入流中讀取方法中使用的字節數據類型
我想知道的是它讀取什麼類型的字節數據?含義是否使用ASCII或Unicode或任何其他類型?
我已閱讀約FileInputStream
,我發現它具有讀取方法,它將讀取文件的字節數據。文件輸入流中讀取方法中使用的字節數據類型
我想知道的是它讀取什麼類型的字節數據?含義是否使用ASCII或Unicode或任何其他類型?
我想知道什麼類型的字節數據它讀取?意思是它使用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
,圖像讀取器類等處理。
它不改變文件編碼。如果你想在所希望的編碼字節[]解碼,可以使用charset
在如下所需的字符集轉換:
Charset cs = Charset.forName("UTF-8"); // breaks too
String convertedString= new String(byteArray, cs);
的FileInputStream是爲讀流的原始字節,如圖像數據。爲了讀取字符流,請考慮使用FileReader。
ASCII,Unicode,...適用於字符而不是字節。它們只是字節(8位)。
您可以在指定字符集的地方使用public InputStreamReader(InputStream in, Charset cs)
。
FileInputStream
是一個二進制I/O類。它的文本I/O需要從Unicode轉換爲文件特定的編碼,反之亦然,但二進制I/O不需要任何轉換。當您從文件讀取一個字節時,返回原始字節。
它只是讀取字節,不管它是什麼。對於你的情況,你應該使用StreamReader類。您可以在構造函數中指定編碼。當它讀取一個字節時,它會使用指定的方案將它們轉換爲Unicode,並在寫入操作期間使用相同的方案將其返回。 – krammer