java - readUTF 工作一次,然后抛出 EOFException

标签 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 结束。这段代码有什么问题?

最佳答案

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

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

关于java - readUTF 工作一次,然后抛出 EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327748/

相关文章:

java - Android 开发和 TDD

JavaFx 与 Maven : doesn't find the mainClass

ruby-on-rails - 在 Rails 中保存后向属性添加了奇怪的字节

java - 字符串类内部 - 如果使用 UTF-8,缓存字符偏移到字节关系

java - java中删除字符串中的重复字符而不使用字符串函数

java - jparsec 中的困惑

c# - 为什么 XmlSerializer 要求从 IEnumerable 继承的类型具有 Add(System.Object) 的实现?

java - Java 中异常的速度

java - 我的 try catch 没有显示警告消息

java - 从 Windows 控制台中的 Java 代码问题打印出 unicode