2012-10-13 48 views
0

之间的效果我用ObjectOutputStream的客户端和服务器之间的基于Socket的连接。聊斋志异“缓存”客户端和服务器

序列化和交换的对象具有这样的结构:

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; 
     } 

} 

的问题是,当我尝试incapsulated内容非常相似(ArticoloDati只有2场的人不同了10 C/S之间交换消息),客户发送一个ArticoloDati,但服务器收到前一个。

ObjectOutputStream是否在调用之间实现某种缓存或内存,但无法识别出我的2个对象是不同的,因为它们非常相似?

+0

你试过以后每次冲洗你输出的东西流? – OmniOwl

+0

@Vipar是的,我做到了。 – alessiop86

回答

0

你需要禁用系列化“反向引用”,所以用ObjectOutputStream.writeUnshared

将一个“未共享”对象写入ObjectOutputStream。此方法是相同的writeObject,不同之处在于它总是给定的对象写入作为流中的一个新的,独特的对象(而不是一个向后引用指向先前串行化实例)。

在某些情况下将其与ObjectInputStream.readUnshared耦合是一种很好的做法 - 包括这一项。

+0

我需要做一些测试,但我接受了答案,这就是我需要知道 – alessiop86

+0

@马克你的'RichiestaSlavataggioArticolo'对象具有相同的身份,只有它的状态已经改变什么;它的现有序列化副本(具有外的日期的状态)被存储在服务器侧和客户端仅于先前序列化对象写入的参考。这种行为是故意的,可以使用非共享方法避免。 – oldrinb