0
我現在使用的框架Netty的Android和有問題,當我收到大量的數據:接收較大的ByteBuffer的Android
@Override public void channelRead(final ChannelHandlerContext ctx, Object msg) {
bufferIn = (ByteBuf) msg;
if (bufferIn.readableBytes() >= 4) {
size = bufferIn.readInt();
result = bufferIn.toString(CharsetUtil.ISO_8859_1);
if(size == result.length){
Log.d("D", "RECEIVED: " + size + " " + result);
}
ctx.flush();
}
bufferIn.release();
}
當我收到它進來的數據包的數據,我不知道如何收到這些包裹。 感謝
我添加一行:
ch.pipeline().addLast(new NettyDecoder(), new NettyHandler(service, size, message, listener));
在解碼器:
class NettyDecoder extends ByteToMessageDecoder
@Override protected void decode(final ChannelHandlerContext theContext, final ByteBuf in, List<Object> out) throws Exception {
if (in.readableBytes() < 4) {
return;
}
in.markReaderIndex();
int dataLength = in.readInt();
if (in.readableBytes() < dataLength) {
in.resetReaderIndex();
return;
}
byte[] decoded = new byte[dataLength];
in.readBytes(decoded);
out.add(decoded);
//out.add(in.readBytes(in.readableBytes()));
}
在處理程序:
void channelRead(final ChannelHandlerContext ctx, Object msg) {
ByteBuf m = (ByteBuf) msg;
bufferIn.writeBytes(m);
m.release();
if (bufferIn.readableBytes() >= 4) {
size = bufferIn.readInt();
for (int i = 0; i < bufferIn.capacity(); i ++) {
byte b = bufferIn.getByte(i);
result += (char) b;
}
}
Log.d("WEB", "RESULT: " + size + " " + result.getBytes().length + " " + result);
bufferIn.release();
但現在我不想收到任何消息NettyHandler。
有人可以教我如何接收處理程序上的消息?
好的諾曼,我會找的,你知道我在哪裏可以找到一個例子嗎? –
NETTY中有許多編解碼器使用它...只需檢查編解碼器模塊。 –