繁体   English   中英

ObjectOutputstream 覆盖旧对象而不关闭流

[英]ObjectOutputstream overwriting old object without closing stream

我想要实现的目标:当我使用ObjectOutputstream类中的writeObject()方法将 Integer 对象保存到文件时,我想覆盖旧的 Integer 对象并将其替换为新的。 但是我不想在每次我想放置一个新的 Integer 对象时关闭并再次打开流。 我只想用新值更新它。

我提出的解决方案对我不起作用。 这是代码:

ObjectOutputStream stream1 = new ObjectOutputStream(new FileOutputStream(new File("ClientBase"), false));

stream1.writeObject(new Integer(2));

stream1.flush();
stream1.reset();

stream1.writeObject(new Integer(9));
stream1.close();

当我读到这篇文章时,我有两个 Integer 对象,而不是一个值为 9 的 Integer 替换为值为 2 的 Integer。

如果我这样说,它就起作用了。

ObjectOutputStream stream1 = new ObjectOutputStream(new FileOutputStream(new File("ClientBase"), false));

stream1.writeObject(new Integer(2));
stream1.close();    

stream1 = new ObjectOutputStream(new FileOutputStream(newFile("ClientBase"), false));

stream1.writeObject(new Integer(9));
stream1.close();

我的问题:我是否以错误的方式使用了reset()方法,还有没有其他方法可以在不关闭/打开流的情况下实现覆盖?

这是我尝试过的。

但是,请注意,我不确定此代码是否安全...:

public static void main(String[] args) {
    try (FileOutputStream fos = new FileOutputStream("objects.file");
            ObjectOutputStream os = new ObjectOutputStream(fos)) {
        long position = fos.getChannel().position();
        os.writeObject(new Integer(2));
        os.flush();
        os.reset(); // added line
        fos.getChannel().position(position);
        os.writeObject(new Integer(9));
        os.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM