org.jboss.netty.buffer.ChannelBufferInputStream.available()中的错误?

时间:2012-03-23 14:04:16

标签: java netty

ChannelBufferInputStream.available()方法是:

@Override
public int available() throws IOException {
    return endIndex - buffer.readerIndex();
}

如果在输入流初始化后写入缓冲区,这不会中断吗?

这不应该是

return buffer.writerIndex() - buffer.readerIndex();

我正在尝试这样做: 初始化缓冲区和流以及读/写ChannelBuffer。我在这里错过了什么?

final ChannelBuffer _channelBuffer = ChannelBuffers.dynamicBuffer();

final ChannelBufferOutputStream _outputStream = new ChannelBufferOutputStream(_channelBuffer);

final ChannelBufferInputStream _inputStream = new ChannelBufferInputStream(_channelBuffer);

编辑: 根据ChannelBufferedInputStream的构造函数文档:“创建一个新流,它从指定的缓冲区读取数据,从当前的readerIndex开始,到当前的writerIndex结束。”

在这种情况下,它是有道理的。但有没有办法实现我想做的事情?有一个支持的缓冲区,读操作等待写操作完成。

2 个答案:

答案 0 :(得分:1)

我需要一个流来拉取一个AudioInputStream,不幸的是它在一个单独的线程中运行,但我找到了一个使用PipedInputStream / PipedOutputStream的解决方法。效果很好。

基本上,messageReceived将我的字节转储到PipedOutputStream中,我的音频线程从PipedInputStream读取并写入我的SourceDataLine。

答案 1 :(得分:0)

这是一种故意行为。创建ChannelBufferInputStream时确定流的结尾。我同意文档没有明确说明这种行为。我来解决它。