在Javascript中将ArrayBuffer类型的结果存储在一个数组中

时间:2014-02-28 17:59:26

标签: javascript arrays html5 arraybuffer

我正在使用HTML5 FileReader和File API制作离线音乐播放器。 这还包括基本的播放列表功能。

现在,当用户选择多个文件时,我将这些文件检索为ArrayBuffer。

问题是,我想将这些返回的文件存储到普通数组中,以便以后可以在播放列表中使用它们。

如何在Javascript中实现这一目标?

function load_files(){
    var files = document.getElementById('file').files;
    var k = files.length;
    for (var i = 0; i < k; i++) {
        var reader = new FileReader();
        reader.onload = function(e) {
            playlist[i] = this.result;
        };
        reader.readAsArrayBuffer(this.files[i]);
        alert(song_counter); 
        initSound(playlist[song_counter]);
    }
}

1 个答案:

答案 0 :(得分:1)

您不能只将ArrayBuffer存储在数组中并从中重新读取该文件。缓冲区用于加载固定长度的字节并使它们保持不变,这样就不会耗尽字节数。

相反,您应该将ArrayBuffer中的所有字节读入byteArray并将byteArrays存储在数组中。然后,您可以重放字节数组中的所有歌曲。

如果你已经在本地拥有歌曲(因为你的问题没有说明你从哪里获得文件),你可以只存储文件的路径,然后从那里重新加载文件。

我希望这是有道理的。