我正在使用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的数据?
最佳答案
不知道更大的代码流是什么样子,很难推荐最佳实践,但是假设您正在读取传入的网络流,则更好的模式可能是使用一系列管道处理程序,例如:
HeaderHandler --> decoder, returns null until 14 bytes are read
InflaterDecoder --> Inflates the remainder (will ZLibDecoder work ?)
AppHandler --> Receives the inflated buffer
但是要直接回答您的第一个问题,ChannelBufferInputStream.readBytes()将引用javadoc:
返回到目前为止该流读取的字节数。
关于java - 如何用InflaterInputStream包装Netty的ChannelBufferInputStream来膨胀数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21349259/