0

我想将音频文件读入不同大小的多个字节数组。然后添加到共享内存中。

如果使用下面的代码会发生什么。字节数组是否被覆盖。我知道它会创建多字节数组,我如何在我的代码完成它需要做的事情后擦除这些字节数组。

int TotalBuffer = 10;
while (TotalBuffer !=0){
    bufferData = new byte[AClipTextFileHandler.BufferSize.get(j)];
    input.read(bufferData);
    Sharedbuffer.put(bufferData);
    i++;
    j++;
    TotalBuffer--;
}
4

2 回答 2

1

你的问题我不清楚,但是如果你问的是那条线

bufferData = new byte[AClipTextFileHandler.BufferSize.get(j)];

与每次迭代和创建new byte[]数组相比,除非您的共享缓冲区持有对它的引用,否则您先前迭代的数组对象将被垃圾收集。无论如何,不​​会有覆盖等,因为每次都有普通的、新的、0 初始化的字节数组。

于 2013-10-30T10:15:33.230 回答
1

没有字节数组不会被覆盖,因为您在 while 循环体中使用了 new 运算符,因此无论何时执行 while 循环,它都会创建一个新对象而不是覆盖。

再次为了清理字节数组的内存,您可以通过显式调用垃圾收集器来抓住机会,但在内部每当 JVM 在堆位置发现任何未使用的对象时,只调用 finalize 方法,您编写自己的实现来擦除字节数组的内存通过将其引用分配给null。

注意:我们不能明确地释放任何对象内存。这一切都取决于JVM。

于 2013-10-30T11:41:00.413 回答