2012-05-21 77 views
2

我試圖按字節讀取一些文件。問題是,Java顯示我不是相同的字節,我可以使用遠十六進制編輯器讀取。使用Java以字節讀取文件的非預期字節

使用遠

讀取的字節: 00 00 00 17 00 00 00 29 00 00 00 99 00 00 00 9B

讀取的字節使用Java: 0 0 0 17 0 0 0 29 0 0 0 22 0 0 0 3A

Java代碼:

while ((line = (byte) _br.read()) != -1) { 
    lines.add(line); 
    System.out.println("lines = " + Integer.toHexString(line)); 
} 
+3

這裏您正在做幾個隱式轉換。線條列表的類型是什麼?我猜測問題是有符號/無符號溢出,因爲9B和99都是127以上。 – zeller

+0

謝謝,解決了這個問題! –

回答

1

你過早地把由read()回到字節整數。這會導致溢出,並可能阻止文件檢查的-1結束工作(在當前問題之上)。它表示返回值的文檔介於0和65535之間(不能由字節變量處理)。在java中,字節是帶符號的8位值,所以只要值大於0x7F就會遇到問題。將line變量類型更改爲int並再次嘗試。