0

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 数据存储到缓冲区中?我试图避免传递缓冲区的大小或对其进行扩展,但这会导致其他问题(例如文件未正确读取)。

提前致谢

4

1 回答 1

0

您正在复制数据 3 次,您可以通过首先检查文件大小、分配足够大的字节数组并直接读取来避免这种情况。它还有助于在 ByteArrayOutputStream 中预先分配空间,因此不必多次增加它的大小。

如果您无法预先获得文件大小,则可以为每个块分配一个新的 byte[],并将它们放入一个列表中,直到全部获得。然后分配最后一个数组并将它们全部复制到最后一个数组中。如果你最后需要一个 byte[] 。如果你不这样做,可能会有更有效的方法来进行。

于 2015-03-18T12:31:28.103 回答