在Javascript中将Uint8Array转换成Array

58

我有一个包含某个文件的二进制数据的Uint8Array实例。
我想将数据发送到服务器,在那里它将被反序列化为byte[]。
但是,如果我发送Uint8Array,就会出现反序列化错误。

因此,我希望将其转换为数组,因为数组可以良好地进行反序列化。
我按以下方式操作:

    function uint8ArrayToArray(uint8Array) {
        var array = [];

        for (var i = 0; i < uint8Array.byteLength; i++) {
            array[i] = uint8Array[i];
        }

        return array;
    }

这个函数可以正常工作,但对于大文件来说效率不够高。

问题:有没有更高效的方法将Uint8Array转换为Array?

2个回答

105

如果您的环境支持ES6中的Array.from,您可以使用以下内容:

var array = Array.from(uint8Array)

如果不支持那个,你可以使用

var array = [].slice.call(uint8Array)

是的,[].slice 可以正常工作,并且更加紧凑。但似乎并不更高效。对于 10mb 的文件需要大约 5 秒钟的时间。 - Kysil Ivan
.entries()(和/或.values())返回的是ArrayIterator对象,而不是数组。 - Kysil Ivan
6
略微挑剔一下,但你最好调用Array.prototype.slice.call而不是[].slice,因为这样可以避免不必要的数组构造。 - jordancpaul
我只想说,即使是6年后,这仍然是完美的。我的600万行文件只需要几秒钟。 - cmcnphp

-2

1
不是,它是ArrayIterator对象。请查看链接。 - Kysil Ivan
哦,我明白了,是我的错误!很抱歉没有对你有所帮助!祝你好运! - Vinicio Ajuchan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接