我的代码不正确;看起来很简单的对象写入和读取操作,似乎从来不会触发其辅助操作。远程对等方上的内部类线程通过OOS发送ConcurrentHashMap

当到达时(确实如此),好的接收代码将继续以布尔值确定的循环在OIS上侦听该CCHM的更新。这些更新来自发送原始CCHM的同级服务器(每个接收对等方有一个服务同级服务器)。这些兄弟姐妹使用的ObjectOutputStreams取自兄弟姐妹的可见HashMap。兄弟姐妹不在乎是发送给组的新成员,还是发送给现有的成员。关于对等点是新的还是现有的区别仅在接收和使用原始CCHM的接收对等端知道,然后代码继续等待同一OIS上的更新。加入的新对等方将其详细信息添加到远程服务器的Hashtable中,因此,每次发送给所有对等方时,要发送的CCHM都要大一个元素(新的对等方加上现有的n个)。

但是现有对等方不会收到更新的CCHM。而不是用System.out.println()调用填充我的代码或粗暴地停止它,我可能会忽略什么陷阱而陷入混乱?

最佳答案

请参阅ObjectOutputStream.reset()的规范...


重置将忽略任何已写入流的对象的状态。将状态重置为与新的ObjectOutputStream相同。流中的当前点被标记为reset,因此相应的ObjectInputStream将在同一点被重置。先前写入流中的对象将不会被视为已经存在于流中。它们将再次写入流中。

08-04 14:30