본문 바로가기
Study/JAVA Netty Framework

ByteBuf

by Answer Choi 2016. 10. 7.
반응형

netty에서 소켓통신시 데이터를 받을때 ChannelRead라는 method가 호출됩니다.


1
public void channelRead(ChannelHandlerContext ctx, Object msg) {}
cs


수신받은 데이터는 Object msg 형태로 받게 되는데, 이 Object는 ByteBuf에 넣어서 처리를 합니다.


이 ByteBuf라는 녀석은 편리하고 쉬우면서도 주의해야 합니다.


먼저 ByteBuf로 ANSWER라는 데이트를 수신받았다고 가정합니다.


처음 데이터를 읽게 되면 인덱스가 위와 같이 버퍼의 처음을 향해있습니다.


1
2
ByteBuf bb=(ByteBuf) msg;
bb.readByte()
cs

readByte()로 읽었다고 가정하면 'A'가 읽히게 됩니다.


그리고 2번을 더 읽어서 총 3번을 읽고 나면 마커는 4번째를 향해있습니다.

그리고 끝까지 다 읽고나면 더이상 읽을것이 없으므로 Exception이 발생하게 됩니다.


만약 처음이나 임의의 자리부터 읽고 싶다면 readerIndex()로 옮겨가야 합니다.


1
bb.readerIndex(0);
cs



반응형

'Study > JAVA Netty Framework' 카테고리의 다른 글

java에서의 unsigned 타입  (0) 2016.10.07
netty로 서버 만들기-준비  (0) 2016.10.04

인기글