【问题标题】:JavaScript: How to separate a U8IntArray?JavaScript:如何分离 U8IntArray?
【发布时间】:2016-08-24 19:17:38
【问题描述】:

我有一个 20 字节的 U8IntArray,我想将它分成两部分(前 8 个字节和字节 9 到 20):

var arr = new Uint8Array( 20 );
var part1 = arr.slice( 0, 8 );
var part2 = arr.slice( 8 );

console.info( part1, part2 );

在 FireFox 中有效,但在 Chrome 和 Internet-Explorer 中失败:

TypeError: undefined is not a function*

有没有一种简单的方法来分割 Uint8Array,它适用于所有浏览器?

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    问题是Typed Arrays最初是由Typed Array Specification定义的,它没有在TypedArray接口中定义任何slice方法。

    现在类型数组是 ECMAScript 6 的一部分,但 Internet Explorer 并不完全支持它。

    因此,只使用旧规范中定义的方法会更安全。在这种情况下,TypedArray.prototype.subarray 应该从 IE10 开始工作。

    var arr = new Uint8Array( 20 );
    var part1 = arr.subarray( 0, 8 );
    var part2 = arr.subarray( 8 );
    console.info( part1, part2 );

    另一种选择是在缓冲区上使用slice,而不是直接在数组上使用,自 IE11 起支持。

    var arr = new Uint8Array( 20 );
    var part1 = new Uint8Array( arr.buffer.slice( 0, 8 ) );
    var part2 = new Uint8Array( arr.buffer.slice( 8 ) );
    console.info( part1, part2 );

    【讨论】:

    • 感谢您的回复。刚刚在这里看到:stackoverflow.com/questions/35313993/…我会在 10m 内将你的答案标记为正确(如果可能的话)!
    • @Tream 很好的发现,可能一个问题应该作为另一个问题的副本关闭。我认为你的问题更清楚,但是,因为我在这里回答了,如果我关闭另一个,似乎我滥用了我的 dupehammer。
    【解决方案2】:

    您可以从原始缓冲区源创建一个新的Uint8Array,然后指定第二个和第三个参数以检索预期的字节。

    var arr = new Uint8Array( 20 );
    var part1 = new Uint8Array(arr.buffer, 0, 8);
    var part2 = new Uint8Array(arr.buffer, 8);
    

    请注意,此方法不会对原始 ArrayBuffer 进行切片。

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多