2013-11-04 40 views
0

我們使用java基元的'字節'如fileInputStream.read(byte)等讀取和寫入二進制文件等。在一些更多的例子中,我們看到byte[] = String.getBytes()。一個字節只是8位值。爲什麼我們使用byte[]來讀取二進制文件?從文件或字符串讀取後,字節值包含的內容是什麼?爲什麼我們使用字節來讀取二進制數據

+1

您將如何處理二進制數據?讀取位?一個字節或多或少是大多數內存/文件/ IO系統共有的基本數據結構。 – Matthias

+0

還有什麼用來讀取二進制數據? – Rik

+0

Java爲了讀取字節而進行了大量優化,這就是爲什麼在您真正需要的時候將布爾值存儲爲字節的原因。 –

回答

5

讀和使用java原始的「字節」等fileInputStream.read(byte)

因爲操作系統模型的文件作爲字節序列(或更精確地,如八位字節)寫二進制文件。 byte類型是Java中八位字節的最自然表示。

爲什麼我們使用byte []來讀取二進制文件?

和以前一樣的答案。但實際上,您也可以用其他方式讀取二進制文件;例如使用DataInputStream

從文件或字符串讀取後,字節值包含的內容是什麼?

在第一種情況下,文件中的字節。

在第二種情況下,您不會從字符串中「讀取」字節。相反,當您撥打String.getBytes()時,您將得到包含字符串字符的字節,這些字符是編碼的中的特定字符集。如果使用無參數getBytes()方法,您將獲得JVM的默認字符集/編碼。您也可以提供一個參數來選擇不同的編碼。


Java對字節(8位)數量和字符進行了明確區分。從概念上講,Java字符是Unicode代碼點,字符串和文本的類似表示是字符序列...不是字節序列。在設計Java時,Unicode字符空間被設置爲16位,即有< = 65536個被識別的代碼點,Java被設計爲與這個匹配。 。和char類型被定義爲16位無符號整型。但是隨後Unicode擴展到> 65536個代碼點,並且Java留下了一個尷尬的問題,即某些Unicode代碼點無法用一個char值表示。相反,它們由一對char值表示......所謂的替代對 ...以及Java字符串在UTF-16中得到了有效表示。對於最常見的字符/字符集,這並不重要。但是,如果您需要處理不常見的字符/字符集,則正確處理字符串的方法是使用「代碼點」方法。)

-1

因爲最小的存儲單元是字節。

+1

最小的存儲單位是位。一點點(雙關意欲)精細作爲一個普通的數據結構使用 – Matthias

2

該字符串建立在字節上。字節是建立在位上的。這些位「物理」存儲在驅動器上。

因此,不是從驅動器中逐位讀取數據,而是以更大的字節數讀取數據。

所以byte []包含原始數據。原始數據與存儲在驅動器上的數據相同。

您最終會讀取原始數據,然後您可以應用格式化程序將該字節轉換爲字符並最終轉換爲熨燙板上的字母,如果該文件是txt文件。如果你死了,圖像會讀取存儲有關字符顏色信息的字節。

+1

其實,這是誤導。 A ** Java **字符串是一系列的Unicode字符,以16位代碼的序列表示(以UTF-16的形式)。 –

相關問題