10

このページは、読み取るバイトがこれ以上ないことを示したいときに、メソッドが-1を返すことができるようにするためであることを示しています。

しかし、バイトの範囲は-128から127ですよね?そして、read()の戻り型がバイトを返すので、それがバイトである方が理にかなっているのではないでしょうか。

お時間をいただきありがとうございます。

4

5 に答える 5

3

値をとして返す理由は、int0〜255の値を返す必要があることと、ファイルから読み取るバイトがなくなったことを示すことができるためです。を使用するintと、正の符号なし値0〜255の全範囲を返すことができ、ファイルがいつ完成したかを示すことができます。値の256の異なる値だけでこれを提供することはできず、そのbyte半分はJavaのデフォルトでは負です。

于 2012-04-08T05:23:54.933 に答える
3

もちろんですが、JavaDocsは続けて言います。

戻り値:バッファに
読み込まれた合計バイト数。ファイルの終わりに達したためにデータがなくなった場合は-1。

うまくいけば、一度に127バイト以上をストリームから読み取ることができます。

于 2012-04-08T05:24:49.523 に答える
2

0データのバイトは からまでの範囲の符号なしの値ですが、Java255の aは からまでの範囲で定義されており、バイナリ データを読み取るときには意味がありません。 有効なデータを表すために負でない値をすべて使用できるように整数を返し、データの終わりを示すために負の値を返します。byte-128127read()

一般に、関数は、データを返すために使用するメカニズムとは異なるメカニズムを使用して、エラー状態または例外を示す必要があります。最も単純なケースでは、有効なデータを表すために使用できない値を返し、その意味を明確にすることができます。

于 2012-04-08T05:21:50.087 に答える
1

Q:read()の戻り型がバイトである方が理にかなっていますか?

A:いいえ、「byte」は範囲0..255(符号なし)全体を返すことはできず、「short」は単なるPITAであるためです。

于 2012-04-08T05:29:15.027 に答える
0

FileInputStreamクラスを使用すると、ファイルの内容をバイトストリームとして読み取ることができます。簡単な例を次に示します。

InputStream input = new FileInputStream("c:\\data\\input-text.txt");

int data = input.read();
while(data != -1) {
  //do something with data...
  doSomethingWithData(data);

  data = input.read();
}
input.close();

注:わかりやすくするために、ここでは適切な例外処理をスキップしています。正しい例外処理の詳細については、JavaIO例外処理にアクセスしてください。

FileInputStreamのread()メソッドは、読み取られたバイトのバイト値を含むintを返します。read()メソッドが-1を返す場合、ストリームで読み取るデータはこれ以上ないため、閉じることができます。つまり、バイト値としての-1ではなく、int値としての-1です。ここに違いがあります!

于 2012-04-08T05:30:06.750 に答える