このページは、読み取るバイトがこれ以上ないことを示したいときに、メソッドが-1を返すことができるようにするためであることを示しています。
しかし、バイトの範囲は-128から127ですよね?そして、read()の戻り型がバイトを返すので、それがバイトである方が理にかなっているのではないでしょうか。
お時間をいただきありがとうございます。
このページは、読み取るバイトがこれ以上ないことを示したいときに、メソッドが-1を返すことができるようにするためであることを示しています。
しかし、バイトの範囲は-128から127ですよね?そして、read()の戻り型がバイトを返すので、それがバイトである方が理にかなっているのではないでしょうか。
お時間をいただきありがとうございます。
値をとして返す理由は、int
0〜255の値を返す必要があることと、ファイルから読み取るバイトがなくなったことを示すことができるためです。を使用するint
と、正の符号なし値0〜255の全範囲を返すことができ、ファイルがいつ完成したかを示すことができます。値の256の異なる値だけでこれを提供することはできず、そのbyte
半分はJavaのデフォルトでは負です。
もちろんですが、JavaDocsは続けて言います。
戻り値:バッファに
読み込まれた合計バイト数。ファイルの終わりに達したためにデータがなくなった場合は-1。
うまくいけば、一度に127バイト以上をストリームから読み取ることができます。
0
データのバイトは からまでの範囲の符号なしの値ですが、Java255
の aは からまでの範囲で定義されており、バイナリ データを読み取るときには意味がありません。 有効なデータを表すために負でない値をすべて使用できるように整数を返し、データの終わりを示すために負の値を返します。byte
-128
127
read()
一般に、関数は、データを返すために使用するメカニズムとは異なるメカニズムを使用して、エラー状態または例外を示す必要があります。最も単純なケースでは、有効なデータを表すために使用できない値を返し、その意味を明確にすることができます。
Q:read()の戻り型がバイトである方が理にかなっていますか?
A:いいえ、「byte」は範囲0..255(符号なし)全体を返すことはできず、「short」は単なるPITAであるためです。
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です。ここに違いがあります!