我正在使用Byte buffer
allocate
方法,它返回了一个堆内存不足的错误。此缓冲区用于从内部存储中读取音频文件并对其进行解码。我正在使用带有刀具的音频播放器,之后我遇到了这个问题。
答案 0 :(得分:0)
请勿将整个(特别是大)文件一次性读入内存。
您正在剪切音频文件的一部分。
如果您需要阅读文件的中间部分或您知道的特定位置,请使用RandomAccessFile。或者,从文件的开头开始逐字节读取,但不要将不必要的信息存储到程序存储器中。比如,如果您需要索引文件的某些部分,请将这些偏移存储到内存中,而不是存储在文件中的其余数据。
实际上,RandomAccessFile
包含您可能希望在ByteBuffer
中使用的大部分功能,例如writeShort
,readShort
等。
如果您想将部分文件复制到另一个文件/流中,请换行另一个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();