0

私はそのRandomAccessFileようなものに書いています:(LinkedListのサブクラスで)

file.setLength(0);
for (Person person : this)
    file.writeUTF(person.getBlob());

Person.getBlob()基本的な英数字、スペース、および CR (半角文字のみ) のみを含む、一定の長さの文字列を返します。この場所で、ファイルにはちょうど 100 レコードが含まれます。(16進エディタで確認)

次に、そのファイルを読み取ろうとします。

int counter = 0;

while (true) {
    try {
        add(Person.fromBlob(file.readUTF()));
    } catch (EOFException e) {
        System.out.println(counter + " records read from file.");
        break;
    } catch (Exception exception) {
        throw new DBException(exception);
    }

    counter++;
}

私は常に、正しく読み取られた 1 つのレコードとEOFException. このコードの何が問題になっていますか?

4

1 に答える 1

1

私は解決策を見つけました。そのクラスには、add()何かが追加されるたびにファイルを書き換えるカスタム メソッドがありました。ループの開始時には 100 のエントリがありましたが、1 回実行した後は 1 つのエントリだけが残りました。また、不足している 99 個のエントリを常に追加する追加のコードもいくつかありました。

に交換add()することでsuper.add()問題は解決しました。

于 2013-05-02T10:31:50.653 に答える