比较:使用缓冲区视图(Uint8与Float64)调整ArrayBuffer的大小,我是否缺少某些东西?

N.泰勒·穆伦

我一直在寻找如何调整ArrayBuffers大小的方法,下面是两种方法:

1(Uint8Array):

function resizeUint8(baseArrayBuffer, newByteSize) {
    var resizedArrayBuffer = new ArrayBuffer(newByteSize),
        resizedView = new Uint8Array(resizedArrayBuffer),
        baseView = new Uint8Array(baseArrayBuffer);

    for(var i = 0; i < baseView.length; i++) {
        resizedView[i] = baseView[i];
    }

    return resizedArrayBuffer;
}

2(Float64Array):

// newByteSize is divisible by 8
function resizeFloat64(baseArrayBuffer, newByteSize) {
    var resizedArrayBuffer = new ArrayBuffer(newByteSize),
        resizedView = new Float64Array(resizedArrayBuffer),
        baseView = new Float64Array(baseArrayBuffer);

    for(var i = 0; i < baseView.length; i++) {
        resizedView[i] = baseView[i];
    }

    return resizedArrayBuffer;
}

比较:#1利用Uint8Arrays,因此对于baseArrayBuffer中的每个字节,您必须将其分别复制到调整大小的数组缓冲区中。现在,对于#2,我使用了Float64Array,因此我可以迭代减少8倍以上的索引来获得相同的结果。

关注:使用Float64Array似乎是显而易见的“性能更高”的方法。但是,使用Float64Array时我缺少什么吗?通过Float64Array视图设置每个索引时,我是否会失去数值精度?还有其他缺点吗(除了确保字节大小可以被8整除)?

演员

使用typedArray.set方法比复制for循环中的每个元素都更快

function resizeUint8(baseArrayBuffer, newByteSize) {
    var resizedArrayBuffer = new ArrayBuffer(newByteSize),
        len = baseArrayBuffer.byteLength,
        resizeLen = (len > newByteSize)? newByteSize : len;

        (new Uint8Array(resizedArrayBuffer, 0, resizeLen)).set(new Uint8Array(baseArrayBuffer, 0, resizeLen));

    return resizedArrayBuffer;
}

JSFiddle测试:http : //jsfiddle.net/92zsn529/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将[] uint8转换为float64

来自分类Dev

如何抽象不同的字节缓冲区类型?(NSData,[UInt8]等)

来自分类Dev

在GoLang中将字节片“ [] uint8”转换为float64

来自分类Dev

从float64到uint8的有损转换

来自分类Dev

调整大小后是否应将纹理重新附加到帧缓冲区

来自分类Dev

比较缓冲区

来自分类Dev

如何修复 console.error:“此浏览器缺少缓冲区 v5.x 所需的类型化数组 (Uint8Array) 支持。如果……请使用缓冲区 v4.x”

来自分类Dev

使用WriteableBitmap的缓冲区大小不足?

来自分类Dev

NATIVE nodeJS调整大小的缓冲区图像

来自分类Dev

调整缓冲区大小时OpenGL失败

来自分类Dev

如何将np.dot的数据类型结果从float64更改为uint8?

来自分类Dev

对于CTR模式,我是否需要输出缓冲区为AES块大小的倍数?

来自分类Dev

对于CTR模式,我是否需要输出缓冲区为AES块大小的倍数?

来自分类Dev

确定__i64toa_s的缓冲区大小

来自分类Dev

比较缓冲区子集

来自分类Dev

是否可以仅使用OpenGL确定默认帧缓冲区的大小?

来自分类Dev

我应该使用哪种类型来定义接口中的缓冲区大小?

来自分类Dev

BufferedInputStream的缓冲区大小

来自分类Dev

获取缓冲区的大小

来自分类Dev

FUSE缓冲区的大小?

来自分类Dev

Awk缓冲区大小

来自分类Dev

发生错误:使用本地节点服务调整来自S3的图像大小时,流产生空缓冲区

来自分类Dev

如何获取DataView类型的大小(例如Uint32 = 4,Float64 = 8)以推进偏移量?

来自分类Dev

使用缓冲区比较字符串

来自分类Dev

使用Node.js的最佳缓冲区大小?

来自分类Dev

如何使用asyncio / aiohttp确定最佳的缓冲区大小

来自分类Dev

我是否缺少某些东西,或者“ qmlRegisterSingletonInstance”有错误?

来自分类Dev

我想比较某些东西时是否可以使用Comparator取决于它的属性

来自分类Dev

我想比较某些东西时是否可以使用Comparator取决于它的属性

Related 相关文章

  1. 1

    将[] uint8转换为float64

  2. 2

    如何抽象不同的字节缓冲区类型?(NSData,[UInt8]等)

  3. 3

    在GoLang中将字节片“ [] uint8”转换为float64

  4. 4

    从float64到uint8的有损转换

  5. 5

    调整大小后是否应将纹理重新附加到帧缓冲区

  6. 6

    比较缓冲区

  7. 7

    如何修复 console.error:“此浏览器缺少缓冲区 v5.x 所需的类型化数组 (Uint8Array) 支持。如果……请使用缓冲区 v4.x”

  8. 8

    使用WriteableBitmap的缓冲区大小不足?

  9. 9

    NATIVE nodeJS调整大小的缓冲区图像

  10. 10

    调整缓冲区大小时OpenGL失败

  11. 11

    如何将np.dot的数据类型结果从float64更改为uint8?

  12. 12

    对于CTR模式,我是否需要输出缓冲区为AES块大小的倍数?

  13. 13

    对于CTR模式,我是否需要输出缓冲区为AES块大小的倍数?

  14. 14

    确定__i64toa_s的缓冲区大小

  15. 15

    比较缓冲区子集

  16. 16

    是否可以仅使用OpenGL确定默认帧缓冲区的大小?

  17. 17

    我应该使用哪种类型来定义接口中的缓冲区大小?

  18. 18

    BufferedInputStream的缓冲区大小

  19. 19

    获取缓冲区的大小

  20. 20

    FUSE缓冲区的大小?

  21. 21

    Awk缓冲区大小

  22. 22

    发生错误:使用本地节点服务调整来自S3的图像大小时,流产生空缓冲区

  23. 23

    如何获取DataView类型的大小(例如Uint32 = 4,Float64 = 8)以推进偏移量?

  24. 24

    使用缓冲区比较字符串

  25. 25

    使用Node.js的最佳缓冲区大小?

  26. 26

    如何使用asyncio / aiohttp确定最佳的缓冲区大小

  27. 27

    我是否缺少某些东西,或者“ qmlRegisterSingletonInstance”有错误?

  28. 28

    我想比较某些东西时是否可以使用Comparator取决于它的属性

  29. 29

    我想比较某些东西时是否可以使用Comparator取决于它的属性

热门标签

归档