当前位置:  开发笔记 > 编程语言 > 正文

禁用序列化缓存

如何解决《禁用序列化缓存》经验,为你挑选了1个好方法。

有没有办法在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,但这很浅,因此仍然可以共享引用的对象.

当然,不可变对象像往常一样是胜利.



1> Tom Hawtin -..:

ObjectOutputStream.reset.

您也可以编写对象writeUnshared,但这很浅,因此仍然可以共享引用的对象.

当然,不可变对象像往常一样是胜利.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有