我需要在多个会话中将多个对象附加到单个文件中。
我搜索了相当长的时间,我从here获得了两个解决方案。
1)使用List从文件中获取已写入的对象,将新对象添加到List并重写文件。
2)覆盖writeStreamHeader()
我遵循第二种方法,即覆盖writeStreamHeader()
。
他说
解决方法是子类
ObjectOutputStream
并覆盖writeStreamHeader()
。最重要的writeStreamHeader()
应该打电话 超级writeStreamHeader
方法,如果它是第一次写入 如果要追加,则应调用ObjectOutputStream.reset()
到文件中预先存在的ObjectOutputStream。
所以我试过这个
class ObjectOutput extends ObjectOutputStream
{
protected ObjectOutput(OutputStream os) throws IOException, SecurityException {
super(os);
}
protected void writeStreamHeader() throws IOException
{
File file = new File("abc.txt");
if(file.exists())
{
reset();
}
else
{
file.createNewFile();
super.writeStreamHeader();
}
}
}
当我尝试从文件中读取对象时会出现异常
Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 79737200
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at Get.main(Get.java:11)
然后我尝试了这个solution
现在,它完美无缺!
那么,第一个代码有什么问题?当没有文件时我调用super.writeStreamHeader()
,第二种方法也在同一场景中调用相同的方法。
那么,我有什么遗漏的吗?
谢谢。