LengthFieldBasedFrameDecoder
Netty の ZlibDecodersなどで区切り文字を使用する必要がありますか? デコーダーが「不明な圧縮方法」でエラーになることがあるという問題がありましたが、パイプラインを変更してデータを区切ると、これはなくなりました。Zlib エンコーダー/デコーダーの javadoc では、これが必須であるとは言及されていませんが、それらのスーパー クラスでは言及されています。
質問する
751 次
2 に答える
2
これは、トランスポート プロトコルと、メッセージ/フレームに圧縮が適用される方法に依存します。
以下のように (http のように) コンテンツ部分のみに圧縮が適用される場合、LengthFieldBasedFrameDecoder は必要ありません。これは、デコーダー/エンコーダーが ZlibDecoder/ZlibEncoder で DecoderEmbedder/EncoderEmbedder を内部的に使用する必要があるためです。
+-----+---------------+ | | | | HDR | Content | | | | +-----+---------------+
圧縮がフレーム全体に適用され、トランスポート プロトコルが TCP の場合、圧縮されたフレームには、完全に読み取るためのメッセージ長を識別するヘッダー パラメータが必要です。したがって、パイプラインに LengthFieldBasedFrameDecoder と LengthFieldPrepender が必要になります
+---------------------+ +------+-------------+ | | | | | | Frame | <=> |Length| Zipped Frame| | | | | | +---------------------+ +------+-------------+
于 2012-06-06T19:26:43.400 に答える
1
いいえ、必要ありません。実際、ZlibDecoder/ZlibEncoder は通常、そのようなハンドラの「前」に配置されます。
于 2012-06-06T05:35:21.810 に答える