readUTF工作一次,然后抛出EOFException

时间:2013-05-01 22:54:00

标签: java exception utf-8 randomaccessfile

我正在写这样的RandomAccessFile :(在LinkedList的子类中)

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

Person.getBlob()返回一个常量长度的字符串,仅包含基本的字母数字字符,空格和CR(只有一个字节的字符)。在这个地方,该文件恰好包含100条记录。 (用十六进制编辑确认)

然后我尝试读取该文件:

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++;
}

我总是最终正确读取一条记录并EOFException。这段代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。该类有一个自定义add()方法,每次添加时都会重写文件。在循环开始时有100个条目,但在执行一次后只剩下一个条目。还有一些额外的代码总是添加缺少99个条目。

add()替换super.add()解决了这个问题。