Java System.arraycopy数组边界

时间:2014-03-06 17:28:03

标签: java arrays audio byte

我正在尝试通过大小为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++;
}

因此系统将音频数据以小块的形式复制到缓冲区。 我正在使用小件,因为我想稍后暂停/停止音乐。

1 个答案:

答案 0 :(得分:0)

从我的角度来看,代码无效并抛出IndexOutOfBoundsException。请检查目标数组buffer中的位置。

在while循环的第一次迭代中,偏移量为0,并且您正在写入位置0到65535.在第二次迭代中,您将写入位置65536 * offset,offset = 1.因此,您从{{开始1}}导致上述异常。

关于剩余数据的问题......这也应该不起作用:您的代码始终从源到目标数组复制65536字节的固定长度。您可以使用条件srcPos + length&gt;到达源数组中的某个位置。 src.length,那么你也会有一个IndexOutOfBoundsException。