2012-11-30 7 views
3

현재 Netty 3.5.10.Final을 사용하여 바이트 순서가 혼합 된 이진 프로토콜을 사용하는 서버의 클라이언트를 구현하고 있습니다. 즉, 프로토콜에서 빅 엔디안 순서로 한 세트의 바이트를 읽거나 쓰고, 리틀 엔디안 순서로 다른 세트를 읽은 다음 다시 빅 엔디 언으로 다시 전환해야하는 많은 상황이 있습니다.Netty : ChannelBuffer에서 ByteOrder를 앞뒤로 바꿔서

이 상황을 다루는 쉬운 방법, 특히 ChannelBuffers.wrappedBuffer (ChannelBuffer buf)가 endianness가 다른 경우에 IllegalArgumentException을 던지는 방법이 없다는 것을 발견했습니다. 나는 나가서 Netty와이 프로토콜에 대해 배우고 있기 때문에 시작할 때이 문제에 부딪치게 될 것임을 알지 못했습니다.

다른 사람들이 특히 Netty 3.x 프레임 워크의 범위 내에서이 문제를 어떻게 처리 했습니까? 모든 솔루션에 대해 듣고 싶습니다. 당신이 구현하는 프로토콜이 혼합 된 바이트 순서로 필드가있는 경우

답변

3

, 당신은 기본값으로 1 개 바이트 순서를 선택 (예 : 빅 엔디안) 특정 필드의 바이트 순서를 바꿀 수 있습니다 :

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

필드 너비에 따라 swapShort(), swapMedium(), swapInt()swapLong() 중 하나를 사용할 수 있습니다.

+0

아, 아주 좋은 접근 방법입니다. 제 경우에는 약간 지루할 수도 있지만 시도해 보겠습니다. –

관련 문제