Java FileInputStream ObjectInputStream がファイルの終わり EOF に到達しました 質問する

Java FileInputStream ObjectInputStream がファイルの終わり EOF に到達しました 質問する

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()nullEOF では戻りません。 をキャッチしEOFExceptionて EOF として解釈することはできますが、これでは通常の EOF と切り捨てられたファイルを区別できなくなります。

より良い方法は、メタデータを使用することです。つまり、ObjectInputストリーム内のオブジェクトの数を尋ねるのではなく、その数をどこかに保存する必要があります。たとえば、数やその他のメタデータを記録するメタデータ クラスを作成し、各ファイルの最初のオブジェクトとしてインスタンスを保存できます。または、特別な EOF マーカー クラスを作成し、各ファイルの最後のオブジェクトとしてインスタンスを保存できます。

おすすめ記事