我正在尝试通过大小为65536字节的缓冲区来传输音频。
如果我通过System.arraycopy()
将一段音频数据复制到缓冲区并且剩余的音频数据小于65536,会发生什么?它会抛出错误还是将剩余的字节复制到缓冲区而没有任何错误?
这是我现在的代码:
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++;
}
因此系统将音频数据以小块的形式复制到缓冲区。 我正在使用小件,因为我想稍后暂停/停止音乐。
答案 0 :(得分:0)
从我的角度来看,代码无效并抛出IndexOutOfBoundsException。请检查目标数组buffer
中的位置。
在while循环的第一次迭代中,偏移量为0,并且您正在写入位置0到65535.在第二次迭代中,您将写入位置65536 * offset,offset = 1.因此,您从{{开始1}}导致上述异常。
关于剩余数据的问题......这也应该不起作用:您的代码始终从源到目标数组复制65536字节的固定长度。您可以使用条件srcPos + length&gt;到达源数组中的某个位置。 src.length,那么你也会有一个IndexOutOfBoundsException。