1

我有一个关于 Java 序列化语义的问题:两次反序列化同一个对象实际上会在内存中创建两个实例吗?例如:

    ByteArrayOutputStream ba = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(ba);

    LinkedListNode tail = new LinkedListNode(null);
    LinkedListNode n1 = new LinkedListNode(tail);

    oos.writeObject(n1);
    oos.flush();

    ByteArrayInputStream bi = new ByteArrayInputStream(ba.toByteArray());
    ObjectInputStream ois = new ObjectInputStream(bi);
    LinkedListNode r1 = (Node)ois.readObject();

    ByteArrayInputStream bi2 = new ByteArrayInputStream(ba.toByteArray());
    ObjectInputStream ois2 = new ObjectInputStream(bi2);
    LinkedListNode r2 = (Node)ois2.readObject();

    System.out.println("r1 == r2 " + (r1 == r2)); // prints false
    System.out.println("r1.next == r2.next " + (r1.next == r2.next)); // prints false

该代码似乎暗示答案是肯定的。我想知道这种行为是否有意义?

4

1 回答 1

3

是的,反序列化会创建对象的一个​​新实例,并且多次反序列化会创建多个实例 - 除非您覆盖反序列化方法并实现某种池,例如,请参见此处

于 2013-02-20T15:19:28.867 回答