Java System.ArrayCopy阵列边界



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

最新更新