将不同数据类型的类型化数组合并到单个arraybuffer中
Merging typed arrays of different data type into a single arraybuffer
我想知道是否有一种方法可以将不同类型的多个类型数组合并到一个arraybuffer中。
此刻我通过websockets发送二进制数据到服务器。但现在我只是使用Uint8数组。所以我组装了一个新的Uint8Array([with, the, data, I, need]),并将这个数组的缓冲区(Unint8Array.buffer)发送给服务器。
但现在它可能发生,我需要一些Uint16或Float32数据在我的请求,混合在我的Uint8数据。有什么方法可以做到这一点,以及如何做到。
编辑:请求数据的长度未知,因为我必须动态地组装请求。
谢谢你的回复
是的,你可以这样做,这就是为什么类型数组有数组和它存储东西的缓冲区的分离。下面是一个缓冲区的两个视图的示例,一个包含字节,一个包含字:
// Create the buffer
var buf = new ArrayBuffer(10);
// Create a byte view of it
var a8 = new Int8Array(buf);
// Create a word view of it
var a16 = new Int16Array(buf, 2, 2);
// Set a couple of words
a16[0] = 0x1221;
a16[1] = 0x2442;
// Show the contents of the byte array
var i;
for (i = 0; i < a8.length; ++i) {
console.log("0x" + a8[i].toString(16));
}
输出:
<>之前0 x00 x00 x210 x120×0 x240 x00 x00 x00 x0之前为了清晰起见,我已经明确地创建了ArrayBuffer
,但您也可以明确地im:
// Create a byte view and underlying buffer
var a8 = new Int8Array(10);
// Create a word view of the byte view's buffer
var a16 = new Int16Array(a8.buffer, 2, 2);
// Set a couple of words
a16[0] = 0x1221;
a16[1] = 0x2442;
// Show the contents of the byte array
var i;
for (i = 0; i < a8.length; ++i) {
console.log("0x" + a8[i].toString(16));
}
编辑:请求数据的长度未知,因为我必须动态地组装请求。
如果您已经分配了足够大的ArrayBuffer
,这并不一定是一个问题,您只需要在相关的起点(例如)为缓冲区的其余长度创建视图。但是你至少要在之后跟踪你写的内容有多大,这样你就知道在哪里继续写其他数据
相关文章:
- JQuery合并了keyup和focusout两个函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 是否可以禁用jquery中的单个单选按钮
- JSON重构(合并内容)与javascript
- 谷歌地图API:热图&搜索-无法合并到单个映射中
- 压缩脚本和样式,并将所有js和样式引用合并为单个引用,以优化网站性能
- 将培根流中的所有值合并到单个数组中
- 如何将这些函数合并为具有属性的单个函数
- 使用lodash将重复对象合并到单个数组中
- 合并对象&对单个属性javascript求和
- Javascript -合并单个对象属性
- 合并两个数据uri以创建单个图像
- 如何将两个对象合并为包含方法的单个对象
- 使用rowspan将重复值单元格合并为具有相同空间的单个单元格
- CoffeeScript:使用lodash(_.js)将列表合并为单个列表
- 我可以将z索引层合并到单个图像中吗
- Angular:使用gulp将Angular js文件合并为单个js文件后出现错误
- 将从多个网页中抓取的数据合并为单个页面
- 如何将异构数组合并到MongoDb中的单个文档