ObjectOutputstream 在不关闭流的情况下覆盖旧对象
ObjectOutputstream overwriting old object without closing stream
我想要实现的目标:当我使用 ObjectOutputstream
class 中的 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()
方法,还有没有其他方法可以在没有 closing/opening 流的情况下实现覆盖?
这是我试过的。
但是请注意,我不确定此代码是否安全...:[=11=]
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();
}
}
我想要实现的目标:当我使用 ObjectOutputstream
class 中的 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()
方法,还有没有其他方法可以在没有 closing/opening 流的情况下实现覆盖?
这是我试过的。
但是请注意,我不确定此代码是否安全...:[=11=]
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();
}
}