2012-02-24 23 views
1

可能性の重複:
Why does InputStream#read() return an int and not a byte?なぜread()の戻り値の型は整数ですか?

Issue regarding the return value of the read() function in java?

リードドキュメントを1として)java.io.FileInputStreamクラスの方法は、次のバイトを読み出し入力ストリーム、なぜそれが戻り値の型の整数、なぜバイトではありません。

これに問題はありますか?

答えて

4

マニュアルから:

データの次のバイト、または-1ファイルの終わりに達した場合。

-1を1バイトに格納することはできません。そうしないと、有効な読み取りと区別できなくなるため、その理由があります。

+2

-1をバイト単位で格納できないのはなぜですか?それは-127から+128の範囲です。 – Santosh

+0

@Santosh:より正確には、バイトで返すことはできません(しかし、*他の部分はかなり明確です) –

+0

もちろん、 '-1'をバイトとして返すことができます。'return(byte)-1;'。もちろん、本当の答えは、バイトで257 *の値を返すことはできません。ストリームの終わりを知らせるためには257番目の値が必要です。 – Bombe

0

ASCII文字のコードが返されます。これは整数です。

したがって、このメソッドの戻り値の型はintとみなされます。

+1

-1間違っています。 InputStreamはプレーン・バイトを読み取り、エンコーディングは適用されません。 InputStreamReaderクラスは、指定されたシステム固有のデフォルトエンコーディング(純粋なASCIIである可能性は低い)を使用して、バイトをcharとして解釈します。 – josefx

+0

@josefx +1情報に感謝します。私はそれを知らなかった – gprathour

2

Javaには符号なしタイプがありません。 read()は符号なしバイトを返し、Javaでそれを表す唯一の方法はint型を使用することです。

byteの値は-128..127の範囲にあり、符号なしバイトの値は0..255の範囲です。

+0

私はバイトb = -1を書く場合; S.O.P(b); -1を出力します。 javaが符号なしバイトをサポートしない場合は、エラーが発生するはずですか? –

+0

いいえ、そうしてはいけません。他の答えですでに述べたように、ストリームの終了を示す特別な戻り値 '-1'があります。 '-128..127'の範囲の値を持つJavaの' byte'型を使用すると、 '-1'の値と' -1'の値を区別できなくなります-ストリーム。 – yatskevich

+0

も整数の範囲で-1が含まれます。それから、ストリームの終わりに-1から-as-a-valueを差し引く方法 –

0

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

関連する問題