Java 重置ObjectOutPutStream以更新新对象状态?
我想重置ObjectOutPutStream以更新新的对象状态。但为什么它不起作用。以下代码输出“之前”而不是“之后”?我的代码怎么了Java 重置ObjectOutPutStream以更新新对象状态?,java,reset,objectoutputstream,Java,Reset,Objectoutputstream,我想重置ObjectOutPutStream以更新新的对象状态。但为什么它不起作用。以下代码输出“之前”而不是“之后”?我的代码怎么了 package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; impo
package test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Serialization {
public static void main(String[] strs) {
String filename = "E:\\myObject.data";
FileOutputStream fos = null;
ObjectOutputStream out = null;
MyObject myObject = new MyObject();
try {
myObject.setValue("BEFORE");
fos = new FileOutputStream(filename);
out = new ObjectOutputStream(fos);
out.writeObject(myObject);
out.reset();
myObject.setValue("AFTER");
out.writeObject(myObject);
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
try {
FileInputStream fis = null;
ObjectInputStream in = null;
fis = new FileInputStream(filename);
in = new ObjectInputStream(fis);
myObject = (MyObject) in.readObject();
System.out.println(myObject.getValue());
in.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
public static class MyObject implements Serializable {
private static final long serialVersionUID = 5222199410120362372L;
private String value;
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
}
您正在写入一个对象的两个副本,但只读取一个副本。如果你读两个物体,你会看到前后两个物体。是的,你是对的。但是我对本文中的解释感到困惑(在“缓存流中的对象”一节中),在不使用reset()的情况下尝试相同的测试,您将看到不同之处。。你的链接断了。你指的是同一篇文章吗?事实上,这也是一篇很好的阅读。作者对使用ObjectOutputStream的不同方法进行了性能测试。遗憾的是,他没有测试writeUnshared方法和另一种方法,即创建一个新的ObjectOutputStream,而不仅仅是重置缓存。