私のJava NIOの実装では、SelectionKey.attach()を動作させることができませんでした。基本的には、クライアントが接続すると(OP_ACCEPT interest ops)、それらをIPアドレスがクライアントの状態を維持するオブジェクトにマップするマップに追加します。その後、OP_READが発生すると、クライアントのIPアドレスを再度取得し、今回はマップから値を取得し、クライアントの状態オブジェクトをそのように取得します。Java:SelectionKey.attach()が壊れていますか?
ここでの問題は、マップの参照を毎回行う必要があることです。データはネットワークから読み取られます。そこには無駄な作業がたくさんあります。だから私はあなたがSelectionKey.attachment()を呼び出すときに簡単に取り出せるはずのSelectionKeyに任意のオブジェクト型を付けることができることに興奮していました。 OP_ACCEPT中のマップ)。
問題は機能しないということです。添付ファイルを取得すると、常にnullになります。私がattach()経由で添付ファイルを設定してすぐにattachment()を呼び出すと、それは動作します。どういうわけか違う出来事の間に、それはその関連を失う。
私は申し訳ありませんが、私のコードはここに投稿することが少し長いですが、あなたはこのスレッドのコメントを見れば: link text ...あなたは、いくつかの他は、基本的に同じ結論に達していることが表示されます。 attach()とattachment()は動作しません。
これを動作させるには手間がかかっていますか、マップ内で手動で参照を行うために必要な邪悪なオーバーヘッドに悩まされていますか?
最後に、attachKey()とattachment()を適切に処理する新しいサブクラスにSelectionKeyを「ラップする」方法がありますか?
ありがとうございます!
ありがとうございました!私が言ったことの組み合わせは、毎回働く解決策につながるかもしれないと思います! :)さらに、attachment()が失敗した場合でも、よりコストのかかるマップのルックアップを行うオプションがあるので、添付ファイルが失われても堅牢に書くことができます!ありがとう! – DivideByHero
これはとても便利です。私はNIOの実装からHashMapを削除することができました。ありがとう! –
この回答に感謝します。私に多くの時間を救った。 – c05mic