0

我的代码生病了;看起来像一个相当简单的对象写入和读取操作,似乎从未解雇其次要操作。远程对等体上的内部类线程通过OOS发送ConcurrentHashMap线程objectoutputstream objectinputstream阻止不读取

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

但是,现有的同伴没有收到更新的CCHM。而不是用我的代码填充System.out.println()的电话或粗暴地停止它,我可能忽略了陷入这个混乱的陷阱?

+0

你能给我一些代码吗? – DankMemes

回答

1

见规范ObjectOutputStream.reset() ...

重置将丢弃已写入流中的所有对象的状态。状态被重置为与新的ObjectOutputStream相同。流中的当前点标记为重置,因此相应的ObjectInputStream将在同一点重置。以前写入流的对象不会被认为已经在流中。他们会再次被写入流中。

+0

我能说些什么,但只是一味地 - 是一个准确和有效的答案。谢谢你太多了! – user1410059

相关问题