堆内存E / dalvikvm-heap:383385715字节分配的内存不足

时间:2016-07-09 07:27:00

标签: java android

我正在使用Byte buffer allocate方法,它返回了一个堆内存不足的错误。此缓冲区用于从内部存储中读取音频文件并对其进行解码。我正在使用带有刀具的音频播放器,之后我遇到了这个问题。

1 个答案:

答案 0 :(得分:0)

请勿将整个(特别是)文件一次性读入内存

您正在剪切音频文件的一部分。

如果您需要阅读文件的中间部分或您知道的特定位置,请使用RandomAccessFile。或者,从文件的开头开始逐字节读取,但不要将不必要的信息存储到程序存储器中。比如,如果您需要索引文件的某些部分,请将这些偏移存储到内存中,而不是存储在文件中的其余数据。

实际上,RandomAccessFile包含您可能希望在ByteBuffer中使用的大部分功能,例如writeShortreadShort等。

如果您想将部分文件复制到另一个文件/流中,请换行另一个OutputStream并将字节复制到较小的部分。

例如,如果要编写65536 short s的文件,从-32768到32767:

RandomAccessFile file = new RandomAccessFile(filename, "rw");
for(short s = Short.MIN_VALUE; s <= Short.MAX_VALUE; s++){
    file.writeShort(s);
}
file.close();