jsarraybuffer,jsarraybufferdata
哪位朋友使用过js中的ArrayBuffer,请教一个转换问题
可以用ajax获得数据的时候设置数据的类型为arraybuffer,那么这个服务器上数据要什么格式才能用ajax的arraybuffer
还是说什么类型都可以,比如txt,html,script,jpg,都可以在传递的时候设置成arraybuffer!
JavaScript中的ArrayBuffer该如何理解呢?
概述
ArrayBuffer?(缓冲数组)是一种用于呈现通用、固定长度的二进制数据的类型。不能直接构造并填充?ArrayBuffer 的内容,而应该先创建一个?ArrayBufferView?对象,该对象用具体的格式来呈现?ArrayBuffer?的内容,你可以使用此对象来读写?ArrayBuffer?的内容。
方法概要
ArrayBuffer?ArrayBuffer(unsigned?long?length);
方法
ArrayBuffer()
构造方法接收一个数字参数,作为新数组的长度,返回新创建的?ArrayBuffer?对象。
ArrayBuffer?ArrayBuffer(
??unsigned?long?length
);
参数
length
要创建的数组的大小。
返回值
新创建的 ArrayBuffer 对象,该对象具有 length 的大小,所有位置均被初始化为 0。
slice()
返回一个新的?ArrayBuffer?对象,它的内容是从当前?ArrayBuffer?的?begin?到?end?位置的备份。
负数的?begin?或?end?值指示从数组末端计数的索引。
ArrayBuffer?slice(
??unsigned?long?begin
??unsigned?long?end?Optional
);
参数
begin
复制 Byte?开始的索引。
end
复制 Byte 结束的索引。如果未指定,返回的 ArrayBuffer 包含从 begin 到此 ArrayBuffer 结尾的所有字节。
返回值
新的?ArrayBuffer?对象。
示例
在下面的示例中,我们创建了一个 32 字节的缓冲数组
var?buf?=?new?ArrayBuffer(32);
js 怎么解析ArrayBuffer
需要通过DataView,一个例子:
var buffer = ... // 一个ArrayBuffer,一般是Ajax取自后台,假设是个Int32数组
var dataview = new DataView(buffer);
var ints = new Int32Array(buffer.byteLength / 4); // 解析到这个数组,注意一个int占4字节
for (var i = 0; i ints.length; i++) {
ints[i] = dataview.getInt32(i * 4); // 每次提取一个int
}
怎么理解JavaScript中的ArrayBuffer
JS里的Array,因为有很多功能,而且是不限制类型的,或者它还可能是稀疏的……总之这个Array是“托管”的,它内部有比较复杂的实现。
而如果你从XHR、File API、Canvas等等各种地方,读取了一大串字节流,如果用JS里的Array去存,又浪费,又低效。
于是为了配合这些新的API增强JS的二进制处理能力,就有了ArrayBuffer。
ArrayBuffer简单说是一片内存,但是你不能(也不方便)直接用它。这就好比你在C里面,malloc一片内存出来,你也会把它转换成unsigned_int32或者int16这些你需要的实际类型的数组/指针来用。
这就是JS里的TypedArray的作用,那些Uint32Array也好,Int16Array也好,都是给ArrayBuffer提供了一个“View”,MDN上的原话叫做“Multiple views on the same data”,对它们进行下标读写,最终都会反应到它所建立在的ArrayBuffer之上。
除了TypedArray以外,也可以使用DataView来读写ArrayBuffer,这样会麻烦一些,但也更灵活。DataView能更自由的选择字节序,对于对齐的要求也更低。
急问:js中arraybuffer如何转成字符串
可以用数组的字符串拼接函数join(),例如
var arr = ["12", "34", "56"];
alert(arr.join("")); // join的参数是分隔符