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
  • 13254

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...

序列化-理解readResolve()

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

Serializable序列化

  • 2014年04月27日 21:57
  • 26KB
  • 下载

Entity实体类为什么要实现Serializable接口才能被序列化

客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Serializable:readResolve
举报原因:
原因补充:

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