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结束。”
在这种情况下,它是有道理的。但有没有办法实现我想做的事情?有一个支持的缓冲区,读操作等待写操作完成。
答案 0 :(得分:1)
我需要一个流来拉取一个AudioInputStream,不幸的是它在一个单独的线程中运行,但我找到了一个使用PipedInputStream / PipedOutputStream的解决方法。效果很好。
基本上,messageReceived将我的字节转储到PipedOutputStream中,我的音频线程从PipedInputStream读取并写入我的SourceDataLine。
答案 1 :(得分:0)
这是一种故意行为。创建ChannelBufferInputStream时确定流的结尾。我同意文档没有明确说明这种行为。我来解决它。