stackoverflow上几乎没有类似的主题,但对我来说它们似乎都不够好。问题是我有这样一段代码:
// AudioInputStream in;
final int BUFFER_SIZE = 8192;
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byte[] byteBuffer = new byte[BUFFER_SIZE];
int bytesRead = 0;
while ((bytesRead = in.read(byteBuffer, 0, BUFFER_SIZE)) != -1) {
byteStream.write(byteBuffer, 0, bytesRead);
}
byte[] audioData = byteStream.toByteArray();
此代码读取mp3文件的数据并将其保存到字节数组,但大约需要10秒。有没有可能在短时间内将整个mp3数据存储到缓冲区? 我试图避免传递缓冲区的大小或扩展它,但这会导致其他问题(例如文件未正确读取)。
提前致谢
答案 0 :(得分:0)
您正在复制数据3次,您可以通过首先检查文件大小,分配足够大的字节数组并直接读取数据来避免这种情况。 它还有助于在ByteArrayOutputStream中预先分配空间,因此它不必多次增加大小。
如果你无法预先获得文件大小,你可以为每个块分配一个新的byte [],并将它们放在一个列表中,直到你得到它们为止。然后分配最终数组并将它们全部复制到最后一个数组中。 IF 最后需要一个byte []。如果你不这样做,可能会有更有效的方法继续下去。