2012-11-30 17 views
3

我目前正在使用Netty 3.5.10.Final來爲使用二進制協議和混合字節順序的服務器實現客戶端。也就是說,協議中有很多情況,我必須按照big-endian順序讀/寫一組字節,然後按小端順序讀取另一組字節,然後再切換回big-endian。Netty:在ChannelBuffer中來回交換ByteOrder

我發現沒有(據我所知)一個簡單的方法來處理這種情況,特別是當ChannelBuffers.wrappedBuffer(ChannelBuffer buf)拋出一個IllegalArgumentException當字節序不一致時。我正在學習Netty和這個協議,所以我不知道當我開始時我會遇到這個問題。

其他人如何處理這個問題,特別是在Netty 3.x框架的範圍內?儘管如此,我很樂意聽到所有的解決方案。

回答

3

如果要實現該協議具有混合字節順序的字段,那麼你可以選擇一個字節順序爲默認(如大端)和swap字節順序在指定的字段:

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

根據字段的寬度,您可以使用其中的一個:swapShort()swapMedium()swapInt()swapLong()

+0

很好,這是一個不錯的方法。這可能對我的情況有點乏味,但我想我會試試看。 –