Java “奇怪”;“缓存”;客户端和服务器之间的影响
我使用ObjectOutputStream在客户端和服务器之间使用基于套接字的连接 序列化和交换的对象具有以下结构:Java “奇怪”;“缓存”;客户端和服务器之间的影响,java,sockets,caching,serialization,Java,Sockets,Caching,Serialization,我使用ObjectOutputStream在客户端和服务器之间使用基于套接字的连接 序列化和交换的对象具有以下结构: public class RichiestaSalvataggioArticolo implements Serializable { private ArticoloDati articolo; public RichiestaSalvataggioArticolo(ArticoloDati articolo) {
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
对象具有相同的标识,只是其状态已更改;它先前的序列化副本(具有过期状态)存储在服务器端,客户端只写入对先前序列化对象的引用。这种行为是故意的,可以使用非共享方法避免。