Serializable:readResolve

原创 2015年07月08日 14:06:24

如果序列化类定义了Object readResolve() ,那么将无视readObject的实现,直接返回作为readResolve() 方法返回值的对象。

public class People implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 2659082826995480601L;
    private int age;
    private String name;

    People(int age,String name)
    {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private void writeObject(ObjectOutputStream out)
    {
        System.out.println("是否调用了我?");
    }
    private void readObject(ObjectInputStream in)
    {
        System.out.println("是否调用了我?");
    }

    private Object readResolve() 
    {
        return new People(20,"老子喜欢刚正面");
    }

}

测试程序:

@Test
public void testOut01() throws FileNotFoundException, IOException
{
    People p = new People(100,"老汉");
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\temp01.txt"));
    out.writeObject(p);
    out.flush();
    out.close();
}

@Test
public void testIn01() throws FileNotFoundException, IOException, ClassNotFoundException
{
    ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\temp01.txt"));
    People p = (People)in.readObject();
    in.close();
    System.out.println(p.getAge());
    System.out.println(p.getName());

}

People p = (People)in.readObject();拿到了

private Object readResolve() 
{
    return new People(20,"老子喜欢刚正面");
}

这个对象,尽管writeObject/readObject什么都没做。
在这个过程中writeObject/readObject仍然在序列话和反序列化过程中被调用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

序列化-理解readResolve()

转自:http://blog.csdn.net/haydenwang8287/archive/2010/10/25/5964130.aspx序列化是java中一个很常用而且很强大的功能。个人的看法,将...
  • FG2006
  • FG2006
  • 2011-05-10 15:57
  • 12506

java单例模式之readResolve()

在我之前的一篇文章中介绍了怎么实现单例模式: http://blog.csdn.net/u011499747/article/details/48194431 但是,这是存在问题的。不考虑反射这种...

readResolve()方法与序列化

在CJC(一) 中提到一个问题,即 readResolve方法是干啥的? 当时也没多想, 只是列在那里, 今天忙里偷闲地把搜点材料整理下这个问题.   原来这个方法跟对象的序列化相关(这样倒是解...

序列化-理解readResolve()

序列化-理解readResolve() 序列化是java中一个很常用而且很强大的功能。个人的看法,将java对象保存到磁盘,以后再从磁盘中读出来,这是java最常用到的功能之一。在基本的情况下...

[疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)

1. 一种不是很好的排除序列化——transient关键字:     1) 如果你不想让对象中的某个成员被序列化可以在定义它的时候加上transient关键字进行修饰,例如: class A impl...

Serializable序列化

  • 2014-04-27 21:57
  • 26KB
  • 下载

Serializable

1.Java的"对象序列化"Java 的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)