Java NIO の私の実装では、SelectionKey.attach() を機能させることができませんでした。基本的に、クライアントが接続したら (OP_ACCEPT 関心操作)、クライアントの IP アドレスがクライアントの状態を維持するオブジェクトにマップされるマップに追加します。次に、OP_READ が発生すると、クライアントの IP アドレスを再度取得し、今度はマップから値を取得して、クライアントの状態オブジェクトを取得します。
ここでの問題は、データがネットワークから読み取られるたびにマップ ルックアップを実行する必要があることです。そこには無駄な作業がたくさんあります。そのため、別のイベントを処理している場合でも (OP_READ 中に取得するのではなく、 OP_ACCEPT 中にマップします)。
問題は、それが機能しないことです。添付ファイルを取得すると、常に null になります。そして、attach() を介して添付ファイルをセットアップし、すぐに attachment() を呼び出すと、機能します。どういうわけか、異なるイベントの間に、それはその関連付けを失います。
申し訳ありませんが、私のコードをここに投稿するには少し長くなりますが、このスレッドのコメントを見ると: リンク テキスト ...基本的に同じ結論に達している他の人もいることがわかります: attach() とattachment() は機能しません。
それを機能させるためのトリックはありますか、または処理する新しい読み取りイベントがあるたびにマップで手動でルックアップを行うために必要な邪悪なオーバーヘッドに悩まされていますか?
最後に、attach() と attachment() を適切に処理する新しいサブクラスに SelectionKey を「ラップ」する方法はありますか?
ありがとう!