• ベストアンサー

ストリームのread()の-1

はじめまして。 教えていただきたいのですが、ストリーム(例えばFileOutputStream)のread()メソッドについてす。 読み込みファイルの最後に達した場合-1をリターンするとあるのですがファイルの値で-1を持っていた場合、前者と後者の違いは何で判断するのでしょうか? お手数ですがお教え下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.4

分からない用語が出てきたら、まず検索してみましょう。 "unsigned int"、"signed int"で検索すれば、コレに対する説明はたくさんヒットします。 unsigned intは「符号なしint」で、いわゆるマイナスの値をとらない数値形式です。 signed intはその逆で「符号ありint」です。 両者の細かな説明はWebで調べるか、Cの本を読むといいと思います。 コンピュータの内部で負の値がどのように表現されてるかの勉強にもなります。

been2005
質問者

お礼

度々ありがとうございました!! 一度調べて確認しておきます。 ご教授ありがとうございました。

その他の回答 (3)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

readメソッドは、読み込んだ1byteのデータをunsigned intに変換し、それをさらにsigned intに変換して返します。 なのでreadメソッドはファイルの終端以外で負の値を返しません。 符号付の-1はビット列で表すと0xFFです。(これは分かりますよね?) 0xFFをunsigned intに変換すると255です。 なので、-1という値のデータはreadメソッドでは255が返ってきます。

been2005
質問者

補足

回答ありがとうございます!! 0xFFという表現方法は大丈夫なのですが、unsigned intとsigned intとはなんでしょうか。 たびたびすいません。。。

回答No.2

FileOutputStreamにはreadメソッドはありませんよ。 1byteずつ読み込むので -1 とファイルに書いてあった場合にreadメソッドで読み込むには、 「-」と「1」と2回読み込むことになります。

been2005
質問者

お礼

回答ありがとうございます。 FileInputStreamの間違いでした。。。。

  • sonetea
  • ベストアンサー率26% (9/34)
回答No.1

1byteの読み込みなので、ファイルから読み込まれた場合のデータは0x00~0xFF(0~255)までとなります。 データとしては-1は存在しません。

been2005
質問者

お礼

ありがとうございます!! もう一度試してみます!!

関連するQ&A