我的代码不正确;看起来很简单的对象写入和读取操作,似乎从来不会触发其辅助操作。远程对等方上的内部类线程通过OOS发送ConcurrentHashMap
。
当到达时(确实如此),好的接收代码将继续以布尔值确定的循环在OIS上侦听该CCHM的更新。这些更新来自发送原始CCHM的同级服务器(每个接收对等方有一个服务同级服务器)。这些兄弟姐妹使用的ObjectOutputStreams
取自兄弟姐妹的可见HashMap
。兄弟姐妹不在乎是发送给组的新成员,还是发送给现有的成员。关于对等点是新的还是现有的区别仅在接收和使用原始CCHM的接收对等端知道,然后代码继续等待同一OIS上的更新。加入的新对等方将其详细信息添加到远程服务器的Hashtable
中,因此,每次发送给所有对等方时,要发送的CCHM都要大一个元素(新的对等方加上现有的n个)。
但是现有对等方不会收到更新的CCHM。而不是用System.out.println()
调用填充我的代码或粗暴地停止它,我可能会忽略什么陷阱而陷入混乱?
最佳答案
请参阅ObjectOutputStream.reset()
的规范...
重置将忽略任何已写入流的对象的状态。将状态重置为与新的ObjectOutputStream相同。流中的当前点被标记为reset,因此相应的ObjectInputStream将在同一点被重置。先前写入流中的对象将不会被视为已经存在于流中。它们将再次写入流中。