2

ファイルをバイト単位で読み込もうとしています。問題は、Java が、Far hex エディターを使用して読み取ることができる同じバイトを表示しないことです。

Far を使用してバイトを読み取る: 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));
}
4

1 に答える 1

1

によって返された整数read()をバイトに変換するのが早すぎます。これによりオーバーフローが発生し、(現在の問題に加えて) -1 のファイルの終わりチェックが機能しなくなる可能性があります。ドキュメントには、返される値が0から65535の間であると書かれています(バイト変数では処理できません)。Java では、バイトは符号付きの 8 ビット値であるため、値が 0x7F より大きい場合は常に問題が発生します。line変数の型を int に変更して、再試行してください。

于 2012-05-21T13:44:46.347 に答える