0

私のコードは病気です。かなり単純なオブジェクトの書き込みおよび読み取り操作のように見えますが、その二次操作を起動することはありません。リモート ピアの内部クラス スレッドはConcurrentHashMap、OOS を介して を送信します。

それが到着すると、受信コードはブール値で決定されたループで、その CCHM の更新を OIS でリッスンし続けます。これらの更新は、元の CCHM を送信した兄弟から送信されます (受信ピアごとに 1 つのサービス提供兄弟が存在します)。これらObjectOutputStreamsの兄弟が使用するものHashMapは、兄弟の表示から取得されます。兄弟は、グループの新しいメンバーに送信するか、既存のメンバーに送信するかは気にしません。ピアが新規か既存かの違いは、元の CCHM が受信されて使用される受信ピア側でのみ認識され、コードは同じ OIS で更新を待ち続けます。参加する新しいピアの詳細は、リモートのHashtableしたがって、送信される CCHM は、すべてのピア (新しいものと既存の n 個) に送信されるたびに 1 要素大きくなります。

ただし、既存のピアは更新された CCHM を受信しません。コードを呼び出しでいっぱいにしSystem.out.println()たり、大まかに停止したりするのではなく、この混乱の中で見落としがちな落とし穴は何ですか?

4

1 に答える 1

1

仕様を参照してくださいObjectOutputStream.reset()...

リセットは、ストリームに既に書き込まれているオブジェクトの状態を無視します。状態は、新しい ObjectOutputStream と同じになるようにリセットされます。ストリームの現在のポイントはリセットとしてマークされているため、対応する ObjectInputStream は同じポイントでリセットされます。以前にストリームに書き込まれたオブジェクトは、既にストリームにあるとは見なされません。それらは再びストリームに書き込まれます。

于 2012-08-22T23:37:40.570 に答える