0

ObjectOutputStream を使用して、クライアントとサーバーの間でソケットベースの接続を使用します。

シリアル化および交換されるオブジェクトは、次の構造を持ちます。

public class RichiestaSalvataggioArticolo implements Serializable {

        private ArticoloDati articolo;

        public RichiestaSalvataggioArticolo(ArticoloDati articolo) {
                this.articolo = articolo;

        }

        @Override
        public void ricevi(GestoreRichieste gestore) throws Exception {
                gestore.interpreta(this);                    
        }


        public ArticoloDati getArticolo() {
                return articolo;
        }

}

問題は、カプセル化されたコンテンツが非常に似ている C/S 間でメッセージを交換しようとすると (ArticoloDati は 10 のうち 2 つのフィールドのみが異なる)、クライアントは ArticoloDati を送信しますが、サーバーは前のものを受信します。

ObjectOutputStream は、呼び出しの間にある種のキャッシュまたはメモリを実装していますか?これは、私の 2 つのオブジェクトが非常に似ているために異なることを認識できませんか?

4

1 に答える 1

0

シリアル化では「後方参照」を無効にする必要があるため、を使用しますObjectOutputStream.writeUnshared

「非共有」オブジェクトをに書き込みますObjectOutputStream。このメソッドはwriteObject、指定されたオブジェクトを常にストリーム内の新しい一意のオブジェクトとして書き込むことを除いて、と同じです(以前にシリアル化されたインスタンスを指す後方参照とは対照的です)。

ObjectInputStream.readUnshared場合によってはこれを組み合わせるのが良い習慣です-これは含まれています。

于 2012-10-13T21:33:42.150 に答える