반응형
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 |