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 回答