我正在使用netty,并且必须在ChannelBufferInputStream中解析二进制数据。这是我正在使用的代码:
ins.skipBytes(14); // skip 14 bytes header
byte[] b = new byte[195]; // note that 195 is the length of data after inflation
(new InflaterInputStream(ins)).read(b, 0, 195);
这可以按预期工作,但它在195字节后设置ChannelBufferInputStream上的标记。 不用说,标记应该在少于195个字节之后设置。
是否有可能得到否定。从输入流读取“实际”字节,以便我可以自己设置标记?或者是否有其他方法可以在netty中膨胀ChannelBuffer的数据?
答案 0 :(得分:1)
在不知道较大代码流的情况下,很难推荐最佳实践,但假设您正在读取传入的网络流,更好的模式可能是使用一系列管道处理程序,如:
HeaderHandler --> decoder, returns null until 14 bytes are read
InflaterDecoder --> Inflates the remainder (will ZLibDecoder work ?)
AppHandler --> Receives the inflated buffer
但是直接回答第一个问题,ChannelBufferInputStream.readBytes()会引用javadoc:
到目前为止,返回此流的读取字节数。