Java “奇怪”;“缓存”;客户端和服务器之间的影响

Java “奇怪”;“缓存”;客户端和服务器之间的影响,java,sockets,caching,serialization,Java,Sockets,Caching,Serialization,我使用ObjectOutputStream在客户端和服务器之间使用基于套接字的连接 序列化和交换的对象具有以下结构: public class RichiestaSalvataggioArticolo implements Serializable { private ArticoloDati articolo; public RichiestaSalvataggioArticolo(ArticoloDati articolo) {

我使用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是否在调用之间实现了某种缓存或内存,但无法识别我的两个对象是不同的,因为它们非常相似?

您需要在序列化中禁用“反向引用”,因此请使用

将“非共享”对象写入
ObjectOutputStream
。此方法与
writeObject
相同,不同之处在于它总是将给定对象作为流中新的唯一对象写入(与指向先前序列化实例的反向引用相反)


在某些情况下,这是一个很好的做法,包括这一个。

您是否在每次向流输出内容后都尝试过刷新?我需要做一些测试,但我接受答案,这正是我需要做的know@mark您的
richiestasalataggioarticolo
对象具有相同的标识,只是其状态已更改;它先前的序列化副本(具有过期状态)存储在服务器端,客户端只写入对先前序列化对象的引用。这种行为是故意的,可以使用非共享方法避免。