我正在使用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/

10-13 21:43