2

java.io.RandomAccessFileクラス用のOracle APIを使用しています。

コンストラクターに渡されたファイルからデータのバイトを読み取るクラスに read() というメソッドがあります。

public int read() は IOException をスローします

このファイルから 1 バイトのデータを読み取ります。バイトは、0 ~ 255 (0x00 ~ 0x0ff) の範囲の整数として返されます。入力がまだ利用できない場合、このメソッドはブロックします。

RandomAccessFile は InputStream のサブクラスではありませんが、このメソッドは InputStream の InputStream.read() メソッドとまったく同じように動作します。

戻り値: データの次のバイト、またはファイルの終わりに達した場合は -1。例外: IOException - I/O エラーが発生した場合。ファイルの終わりに達した場合はスローされません。

ややこしいのですが、コンストラクタに渡されたファイルから8ビットのデータを読み込み、読み込んだ内容をintに変換するということでしょうか。

助言がありますか?

4

2 に答える 2

5

何があなたを混乱させているのですか?

はい、1 バイトのデータ (8 ビット) を読み取り、0 から 255 までの範囲の整数値として返します。したがって、問題のファイルがたまたまテキスト ファイルで、最初の文字が大文字の「A」である場合、read()65 が返されます。

inta の代わりに a を返すbyteので、0..255 の全範囲を正の数として返すことができ、ファイルの終わりのセンチネル値として -1 を使用できます (ただし、おそらく例外の方が適切な方法でした)。そうするために)。

于 2012-11-07T19:13:27.423 に答える
1

Javaには符号なしの型はありません。バイトは、通常、符号なしとして解釈される場合、[0..255]の範囲の整数です。read()また、-1を使用してエラーを示します。したがって、少なくとも257個の異なる値を持つタイプが必要です。Javaintタイプは、32ビットの符号付き整数です。したがって、ドキュメントには、読み取られたバイトの8ビットの符号なし値またはエラーインジケータのいずれかが渡され、32ビットの符号付きリターンタイプでコンテナとして渡されると記載されています。

于 2012-11-07T19:16:07.030 に答える