重写writeStreamHeader()以将对象追加到单个文件

时间:2016-07-17 11:21:01

标签: java

我需要在多个会话中将多个对象附加到单个文件中。

我搜索了相当长的时间,我从here获得了两个解决方案。

1)使用List从文件中获取已写入的对象,将新对象添加到List并重写文件。

2)覆盖writeStreamHeader()

我遵循第二种方法,即覆盖writeStreamHeader()

他说

  

解决方法是子类ObjectOutputStream并覆盖   writeStreamHeader()。最重要的writeStreamHeader()应该打电话   超级w riteStreamHeader方法,如果它是第一次写入   如果要追加,则应调用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(),第二种方法也在同一场景中调用相同的方法。

那么,我有什么遗漏的吗?

谢谢。

0 个答案:

没有答案