1

Java シリアライゼーションのセマンティクスについて質問があります。同じオブジェクトを 2 回デシリアライズすると、実際にはメモリ内に 2 つのインスタンスが作成されますか? 例えば:

    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

はい、逆シリアル化はオブジェクトの新しいインスタンスを作成し、数回逆シリアル化するといくつかのインスタンスが作成されます-逆シリアル化メソッドをオーバーライドして何らかのプーリングを実装しない限り、たとえばhereを参照してください

于 2013-02-20T15:19:28.867 に答える