0

デフォルトでリトルエンディアンのバイト形式で Netty にチャネルバッファを作成する必要があります。私が理解していることは、このコードを使用することです。

bootstrap.setOption("child.bufferFactory", new HeapChannelBufferFactory(ByteOrder.LITTLE_ENDIAN));

ただし、新しいチャネル バッファーを作成したときはビッグ エンディアンであるため、手動でリトル エンディアンにする必要があります。

デフォルトですべてのチャネル バッファをリトルエンディアンにする方法はありますか?

ありがとうございました!

編集:

私は次のようなバッファを作成しています:

ChannelBuffer opcodeBuffer = ChannelBuffers.buffer(ByteOrder.LITTLE_ENDIAN, 4);

このように作成すると

ChannelBuffer opcodeBuffer = ChannelBuffers.buffer(4);

それらはリトルエンディアンではありません

4

1 に答える 1

2

使用している設定はChannel、アプリ内のオブジェクトによって作成されたバッファーを構成するためのものです。これは、Nettyによって作成されたすべてのバッキングバッファーがリトルエンディアンになることを意味します。

ChannelBuffersブートストラップからの構成を使用できない静的ヘルパークラスです。ドキュメントを確認するByteOrderと、ビッグエンディアンのバッファを明示的に作成しているとは言えないメソッドであることがわかります。

したがって、バッファを手動で作成する場合は、必ず正しいエンディアンを使用してください。または、コード内の実装の1つを使用ChannelBufferFactoryして、(必要に応じて)簡単に切り替えることができます。

于 2012-10-13T19:36:04.630 に答える