17

私は DataInputStream を使用しており、EOFExceptions について質問がありました。

Javaドキュメントによると:

入力中にファイルの終わりまたはストリームの終わりに予期せず到達したことを通知します。

この例外は、主にデータ入力ストリームでストリームの終わりを知らせるために使用されます。他の多くの入力操作は、例外をスローするのではなく、ストリームの最後に特別な値を返すことに注意してください。

これは、EOFException が生成されると、ストリームが二度と開かないということですか? それは、これ以上のデータを期待してはならないということですか?

出力ストリームが入力ストリームに接続され、outputstream.close() が呼び出された場合、入力ストリームは EOFException または IOException を受け取りますか?

IOException は次のように記述されます。

何らかの I/O 例外が発生したことを通知します。このクラスは、失敗または中断された I/O 操作によって生成される例外の一般的なクラスです。

出力ストリームを閉じると、datainputstream 側で EOFException または IOException が生成されますか?

4

5 に答える 5

7

キーワードは予想外です。

DataInputStream を使用して 4 バイトの整数を読み取っても、ストリームに 3 バイトしか残っていない場合は、EOFException が発生します。

しかし、ストリームの最後で read() を呼び出すと、-1 が返され、例外は発生しません。

于 2009-03-19T22:44:07.570 に答える
7

ストリームの終わり (ファイルの終わり、またはピアが接続を閉じる) に到達すると、次のようになります。

  • read()-1 を返します
  • readLine()null を返します
  • readXXX()その他の X スローの場合EOFException

ストリームはまだ開いていますが、読み取りを停止して閉じる必要があります。

于 2014-01-04T00:36:07.637 に答える
3

EOFException は IOException のサブクラスです。ストリームから読み取ろうとして、読み取るデータがない場合にスローされます (たとえば、DataInputStream が FileInputStream にラップされていて、ファイルに残っているよりも多くのバイトを読み取ろうとしている場合など)。

于 2009-03-19T22:45:10.250 に答える
0

EOFException がスローされます。

  1. STREAMにデータがないのに読み込もうとしている場合...たとえば、DataInputStream、ObjectInputStream、RandomAccessFile などのチェーン ストリームの read メソッドは、FileInputStream から読み込もうとしていて FileInputStream が空である場合、EOFException をスローします。
  2. または、フォーマットが一致しない場合...たとえば、int が存在し、DataInputStream の readFloat() を使用している場合
于 2010-10-13T18:00:26.267 に答える