私の Netty コードでは、LDAP PDU を処理する FrameDecoder を作成しています。PDU が完了したか (状態はPDU_DECODED
)、またはさらにデータが必要か ( VALUE_STATE_PENDING
) を判断できるコードがあります。さらに、検出できるエラー条件がいくつかあります。
ほとんどの場合、1 回の読み取りで PDU 全体が取得されると思います。しかし、より多くのデータを取得するために別の読み取りが必要な場合に備えて、それをコーディングする最良の方法を知りたいと思っています。
今、私decode()
はリーダー インデックスをマークしbuf.markReaderInded()
ています。利用可能なバイトを読み込んでいます。読み込んだバイトをチェックして、それが有効な PDU かどうかを確認します。そうであれば、読み取ったバイト数を返します。そうでない場合は、リーダー インデックスをリセットし、buf.resetReaderIndex()
null を返します。次に戻ってくるdecode()
と、元のデータと次の読み取りからのデータが表示されます。チェックを再度実行できます。
しかし、最初に読み取った元のデータを保存し、次の読み取りで残りの PDU (または次の部分) を取得したいと考えています。次に、フレームデコーダーのインスタンスに既に保存されているデータにそのデータを追加し、それが有効な PDU であるかどうかを確認します。今回は、リーダー インデックスをリセットせずbuf.resetReaderIndex()
に、null を返しただけです。
ところで、私はすでにsetAttachment()
/getAttachment()
を使用して情報を に格納していChannelHandlerContext
ます。だから私はそれを使用することはできません。接続できたら設定します。
もう一度decode()に戻ったときの状態がわかりません。FrameDecoder
それは私のクラスの同じインスタンスですか、それとも新しいインスタンスですか? 使用できるようになる前に、変数を定義して設定する必要がありますか? Netty がここで何をしているのかわかりません。
ありがとうございました。