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

相關問題