我正在尝试通过大小为65536字节的缓冲区流式传输音频。
如果我通过System.arraycopy()
将一部分音频数据复制到缓冲区,而其余的音频数据将会发生什么?它会丢弃错误还是将剩余字节复制到缓冲区没有任何错误?
这是我现在的代码:
int offset = 0;
while(isAudioActive)
{
byte[] buffer = new byte[65536];
System.arraycopy(this.currentFile.getSampledata().getData(), 65536 * offset, buffer, 65536 * offset, 65536);
//<<writing Audio to track here>>
offset++;
}
因此,系统将音频数据复制到小块中。我使用的是小片段,因为我想稍后暂停/停止音乐。
从我的角度来看,代码将不起作用并投掷indexoutofBoundSexception。请检查目标数组中的位置buffer
。
在while-loop偏移的第一次迭代中是0,您正在写入0至65535的位置。在第二个迭代中,您正在写入65536 * offset = 1的偏移=1。因此,您是在buffer[65536]
开始导致上述例外。
关于剩余数据的问题...这也不适用:您的代码总是将固定长度从源到目标数组的65536字节复制。您可以使用条件srcpos 长度> src.length在源数组中的位置,然后您还将具有一个indexoutofBoundSexception。