readObject を使用してバイナリ ファイルの行番号を読み取ろうとしていますが、IOException EOF が発生します。これは正しい方法でしょうか?
FileInputStream istream = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(istream);
/** calculate number of items **/
int line_count = 0;
while( (String)ois.readObject() != null){
line_count++;
}
ベストアンサー1
readObject()
null
EOF では戻りません。 をキャッチしEOFException
て EOF として解釈することはできますが、これでは通常の EOF と切り捨てられたファイルを区別できなくなります。
より良い方法は、メタデータを使用することです。つまり、ObjectInput
ストリーム内のオブジェクトの数を尋ねるのではなく、その数をどこかに保存する必要があります。たとえば、数やその他のメタデータを記録するメタデータ クラスを作成し、各ファイルの最初のオブジェクトとしてインスタンスを保存できます。または、特別な EOF マーカー クラスを作成し、各ファイルの最後のオブジェクトとしてインスタンスを保存できます。