2017-08-25 136 views
-2

read()方法返回一個int值,表示數據的下一個字節並且read(byte [] b)方法不返回任何內容,它將字節數據值分配給作爲參數傳遞的數組。Java - FileInputStream中的讀取方法 - 爲什麼read()和read(byte [] b)中的數字不同?

我已經取得了一些測試用的圖像文件,我已經採取2種方式:

  • 打印通過讀取返回的結果()方法,直到這個成績是-1(何指的結束文件已經到達)。

  • 創建一個字節數組並將其作爲read(byte [] b)方法的參數傳遞並打印已分配給該字節數組的數字。

我注意到,在這兩種情況下的結果是不同的:在第二種情況下,作爲結果是字節的類型,數均高於127或大於-128不大於少;而在第一種情況下,例如,我發現數字大於200。

由於文件在兩種情況下都是相同的,並且這些數字代表該文件的數據,所以兩種情況下的數字不應該相同嗎?

我還使用FileOutputStream將文件的數據寫入另一個新文件,並且在這兩種情況下,新文件具有相同的字節並且看起來相同(正如我所說的,它是一個圖像)。

謝謝。

+1

你真的*確定'read(byte [] b)'不返回任何東西嗎? – Kayaman

回答

1

由於Java僅簽署了數據類型,因此read(byte[] b)會讀取常規字節,即-128-127。但是read()返回一個int,因此它可以用-1指示流結束,返回無符號字節值從0-255

byte b = (byte)in.read(); // Provided that stream has data left 

會給你看起來就像你在byte[] b已經得到的值的無符號字節。

相關問題