gpt4 book ai didi

java - 使用 FileInputStream 和 FileOutputStream 作为缓冲区

转载 作者:行者123 更新时间:2023-12-02 05:46:53 28 4
gpt4 key购买 nike

我想使用硬盘作为音频信号的缓冲区。我的想法是将样本以字节形式写入文件,并用另一个线程读取相同的文件。但是,我必须提出问题FIS.read(byte[]);返回 0 并给我一个空缓冲区。

这里有什么问题吗?

这是我写入字节的操作:

try {       
bufferOS.write(audioChunk);
bufferOS.flush();
} catch (IOException ex) {
//...
}

这就是我的读者所做的:

byte audioChunk[] = new byte[bufferSize];
int readBufferSize;
int freeBufferSize = line.available(); // line = audioline, available returns free space in buffer

try {
readBufferSize = bufferIS.read(audioChunk,freeBufferSize, 0);

} catch(IOException e) {
//...
}

我创建了 bufferOSbufferIS使用相同的文件,两者都可以工作。
编写器工作,文件被创建并且其中包含正确的数据。
然而bufferIS.read(); -call 总是返回 0 .
fileInputStream使用 buffer.available(); 返回正确的可用字节数和参数如 freeBufferSizeaudioChunk.length是正确的。

运行FileInputStream有问题吗和FileOutputStream在Windows中的同一个文件上?

最佳答案

您以错误的顺序将参数传递给 read 调用,它应该是:

readBufferSize = bufferIS.read(audioChunk, 0, freeBufferSize);

现在,您正在传递 freeBufferSize 作为存储 read 调用结果的偏移量,并传递 0 作为要存储的字节数。最大程度地阅读。如果您告诉 read 调用最多读取零个字节,那么它会返回已读取零个字节,这并不奇怪。

Java 文档:

 * @param      b     the buffer into which the data is read.
* @param off the start offset in array <code>b</code>
* at which the data is written.
* @param len the maximum number of bytes to read.
* @return the total number of bytes read into the buffer, or
* <code>-1</code> if there is no more data because the end of
* the stream has been reached.
public abstract class InputStream implements Closeable {
// ....
public int read(byte b[], int off, int len) throws IOException

关于java - 使用 FileInputStream 和 FileOutputStream 作为缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980600/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com