2017-04-25 64 views
0

在閱讀本書的Java字節流的,我偶然看到這個例子書中使用,以顯示兩者之間的差異。使用的示例是數字199.根據該書,如果將此編號寫入字符流,則將其寫入三個不同的字符:0x31 0xC7 0x39。但是,如果將其寫入字節流,則將其寫入單個值0xC7。我的疑問是,199不適合Java中的一個字節。那麼,它不應該被寫成兩個字節而不是一個?在二進制流中是否寫成1個字節或兩個字節?在字節流混亂

+1

爲了這些目的,一個字節是無符號的,所以它在'0-255' – khelwood

+0

字節在Java中籤署的範圍,不是嗎?它如何被無簽名? – birraa

+0

一個_byte_僅僅是8個數據位:你可以把它當作一個數字0和255之間,即使在Java'byte'類型會認爲它是不同的。 – khelwood

回答

1

如果你打電話OutputStream.write(int),這是寫入單個字節的方法,它會忽略除了低8所有位。這意味着199-57將以完全相同的方式寫入。對於特定的方法,這是它的工作方式,因爲它只能寫一個字節。

如果你叫一些其他的方法,它將不同的方式工作。例如,DataOutputStream.writeInt將一個整數寫成四個字節,因爲這就是該方法的用途。

+0

我只是試過這段代碼:'int n = 199; OutputStream f3 = new FileOutputStream(「file4.txt」); f3.write(N);'是的,它是寫0xC7像你說的這是-57。那麼,是否可以使用字節流(而不是DataOutputStream)寫入199?我的意思是沒有199被損壞。 – birraa

+1

如果這是你想要的,你可以寫兩個字節。如何將它們讀回來將決定你是否將它們視爲兩個數字中的每一個字節或一個數字中的兩個字節(「短」)。 – khelwood