我正在写这样的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
。这段代码出了什么问题?
答案 0 :(得分:1)
我找到了解决方案。该类有一个自定义add()
方法,每次添加时都会重写文件。在循环开始时有100个条目,但在执行一次后只剩下一个条目。还有一些额外的代码总是添加缺少99个条目。
用add()
替换super.add()
解决了这个问题。