【问题标题】:Convert Uint8Array to Array in Javascript在 Javascript 中将 Uint8Array 转换为数组
【发布时间】:2015-04-16 13:44:12
【问题描述】:

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

所以,我想把它转换成数组,因为数组反序列化得很好。
我这样做如下:

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

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

        return array;
    }

这个功能很好用,但是对于大文件效率不是很高。

问题:有没有更高效的方式来转换Uint8Array --> Array?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你可以在已经支持Array.from的环境中使用以下(ES6)

    var array = Array.from(uint8Array)
    

    如果不支持,您可以使用

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

    【讨论】:

    • 是的,[].slice 工作正常,而且更紧凑。但似乎效率不高。 10mb 文件大约需要 5 秒。 (
    • .entries()(和/或 .values())返回 ArrayIterator 对象,而不是数组。
    • 在这里吹毛求疵,但是调用 Array.prototype.slice.call 而不是 [].slice 会稍微好一点,因为它可以节省不必要的数组构造。
    • 我只想说,即使在 6 年后,这也是完美的。我的 600 万行文件只需几秒钟。
    【解决方案2】:

    有一个使用原型的Uint8Array方法(但只支持Firefox和Chrome):

    TypedArray.prototype.entries() --> 它返回一个数组。

    检查一下: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries

    【讨论】:

    • 不,它是 ArrayIterator 对象。阅读链接。
    • 哦,我明白了,我的错误!很抱歉没有对您有所帮助!祝你好运!
    猜你喜欢
    • 2018-02-19
    • 2020-07-03
    • 2021-08-30
    • 2022-08-23
    • 2015-05-02
    • 1970-01-01
    • 2022-11-22
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多