Ser*_*rov 6 javascript websocket typed-arrays
在类型化数组规范中,有一个构造函数允许获取现有的ArrayBuffer并将其视为另一种数组类型.有趣的是,offset参数必须是构造数组的基础类型的倍数.这种限制的原因是什么?
对于背景 - 我试图编码通过WebSocket发送的二进制缓冲区.缓冲区包含不同大小的各种变量.最初我想使用以下代码:
var buffer = new ArrayBuffer(10);
new Uint32Array(buffer, 0, 1)[0] = 234;
new Int16Array(buffer, 4, 1)[0] = -23;
new Uint32Array(buffer, 6, 1)[0] = 6000; // Exception is raised here,
// because 6 is not multiple of 4
Run Code Online (Sandbox Code Playgroud)
为了完成这项工作,我需要重写最后一行,如下所示:
var tempArray = new Uint32Array(1); // Create 32-bit array
tempArray[0] = 6000; // Write 32-bit number
var u8Src = new Uint8Array(tempArray, 0); // Create 8-bit view of the array
var u8Dest = new Uint8Array(buffer, 6, 4); // Create 8-bit view of the buffer
u8Dest.set(u8Src); // Copy bytes one by one
Run Code Online (Sandbox Code Playgroud)
对于这种简单的操作来说,这是太多的代码.
小智 5
未对齐的内存访问不适用于所有平台:
为什么创建的Float32Array的偏移量不是元素大小的倍数? http://en.wikipedia.org/wiki/Data_structure_alignment
使用DataView对象访问未对齐的数据:
https://developer.mozilla.org/zh-CN/docs/JavaScript/Typed_arrays/DataView
| 归档时间: |
|
| 查看次数: |
2965 次 |
| 最近记录: |