有没有办法在Java中禁用序列化对象的缓存?
我有这种情况:
我有一个Serializable的对象,我正在序列化它,反序列化它,值是可以的.
在同一个对象上,我正在改变一些值,我正在序列化它,反序列化它,值不正常,值与第一个初始加载的值相同.
似乎序列化器正在缓存值,或不?
谢谢
从"fredrik"复制此示例并采用我的案例:
public class SerialDeserial { public static void main(String[] args) { try { ChangingObject obj = new ChangingObject(); obj.foo=1; // Write it ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("test.foo")); os.writeObject(obj); os.flush();os.close(); // Read the object ObjectInputStream is = new ObjectInputStream(new FileInputStream("test.foo")); ChangingObject objDummy = (ChangingObject)is.readObject(); System.out.println("objDummy.foo is "+objDummy.foo); // Change it obj.foo=2; // Write it os = new ObjectOutputStream(new FileOutputStream("test.foo")); os.writeObject(obj); os.flush();os.close(); // Read the object is = new ObjectInputStream(new FileInputStream("test.foo")); objDummy = (ChangingObject)is.readObject(); System.out.println("objDummy.foo is "+objDummy.foo); // this returns "1" insted of "2" } catch (Exception e) { e.printStackTrace(); } } } class ChangingObject implements Serializable { public int foo; }
Tom Hawtin -.. 5
ObjectOutputStream.reset
.
您也可以编写对象writeUnshared
,但这很浅,因此仍然可以共享引用的对象.
当然,不可变对象像往常一样是胜利.
ObjectOutputStream.reset
.
您也可以编写对象writeUnshared
,但这很浅,因此仍然可以共享引用的对象.
当然,不可变对象像往常一样是胜利.