0

我的代码有问题;看起来相当简单的对象写入和读取操作,似乎永远不会触发它的辅助操作。远程对等点上的内部类线程ConcurrentHashMap通过 OOS 发送一个。

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

但是现有的对等体没有收到更新的 CCHM。我没有用调用填充我的代码System.out.println()或粗暴地停止它,而是我可能忽略了哪些陷阱来陷入这种混乱?

4

1 回答 1

1

见规范ObjectOutputStream.reset()...

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

于 2012-08-22T23:37:40.570 回答