3

私は現在、Netty 3.5.10.Finalを使用して、混合バイト順序のバイナリプロトコルを使用するサーバーのクライアントを実装しています。つまり、プロトコルには、1セットのバイトをビッグエンディアンの順序で読み書きし、次に別のセットをリトルエンディアンの順序で読み書きしてから、再びビッグエンディアンに切り替える必要がある状況がたくさんあります。

特に、エンディアンが異なる場合にChannelBuffers.wrappedBuffer(ChannelBuffer buf)がIllegalArgumentExceptionをスローする場合、この状況に対処する簡単な方法が(私が知る限り)ないことを発見しました。Nettyとこのプロトコルの両方について学習しているので、始めたときにこの問題が発生することに気づいていませんでした。

特にNetty3.xフレームワークの範囲内で、他の人はこの問題にどのように対処しましたか?しかし、私はすべての解決策について聞きたいです。

4

1 に答える 1

4

実装しているプロトコルに混合バイトオーダーのフィールドがある場合、デフォルトとして1バイトオーダー(ビッグエンディアンなど)を選択し、特定のフィールドのバイトオーダーを交換できます。

ChannelBuffer buf = ...;
int littleEndianField = ChannelBuffers.swapInt(buf.readInt());

フィールドの幅に応じて、、、、、およびのいずれかを使用できswapShort()ます。swapMedium()swapInt()swapLong()

于 2012-12-03T05:48:34.837 に答える