标签: arraybuffer

在字符串和ArrayBuffers之间转换

是否有一种普遍接受的技术可以有效地将JavaScript字符串转换为ArrayBuffers,反之亦然?具体来说,我希望能够将ArrayBuffer的内容写入localStorage并将其读回.

javascript serialization typed-arrays arraybuffer

231
推荐指数
16
解决办法
30万
查看次数

ArrayBuffer到base64编码的字符串

我需要一种有效的(读取本机)方式将ArrayBuffer转换为需要在多部分帖子上使用的base64字符串.

javascript base64 encoding arraybuffer

168
推荐指数
11
解决办法
16万
查看次数

116
推荐指数
8
解决办法
12万
查看次数

如何从Blob转到ArrayBuffer

我正在研究Blob,我注意到当你有一个ArrayBuffer时,你可以很容易地将它转换为Blob,如下所示:

var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,是否可以从Blob转到ArrayBuffer?

javascript blob arraybuffer

100
推荐指数
7
解决办法
11万
查看次数

将base64字符串转换为ArrayBuffer

我需要将base64编码字符串转换为ArrayBuffer.base64字符串是用户输入,它们将从电子邮件中复制和粘贴,因此在加载页面时它们不存在.如果可能的话,我想在javascript中执行此操作而不对服务器进行ajax调用.

我发现这些链接很有趣,但他们没有帮助我:

ArrayBuffer到base64编码的字符串

这是相反的转换,从ArrayBuffer到base64,而不是相反

http://jsperf.com/json-vs-base64/2

这看起来不错,但我无法弄清楚如何使用代码.

是否有一种简单的(可能是原生的)方式进行转换?谢谢

javascript base64 arraybuffer

75
推荐指数
8
解决办法
10万
查看次数

Javascript Typed Arrays和Endianness

我正在使用WebGL渲染二进制编码的网格文件.二进制文件以big-endian格式写出(我可以通过在十六进制编辑器中打开文件或使用fiddler查看网络流量来验证这一点).当我尝试使用Float32Array或Int32Array读取二进制响应时,二进制文件被解释为little-endian并且我的值是错误的:

// Interpret first 32bits in buffer as an int
var wrongValue = new Int32Array(binaryArrayBuffer)[0];
Run Code Online (Sandbox Code Playgroud)

我在http://www.khronos.org/registry/typedarray/specs/latest/找不到任何类型数组默认字节序的引用,所以我想知道这笔交易是什么?在使用类型化数组进行读取时,我是否应该假设所有二进制数据都应该是小端?

为了解决这个问题,我可以使用DataView对象(在上一个链接中讨论)并调用:

// Interpret first 32bits in buffer as an int
var correctValue = new DataView(binaryArrayBuffer).getInt32(0);
Run Code Online (Sandbox Code Playgroud)

默认情况下,"getInt32"等DataView函数会读取big-endian值.

(注意:我已经使用Google Chrome 15和Firefox 8进行了测试,它们的行为方式相同)

javascript endianness webgl typed-arrays arraybuffer

58
推荐指数
5
解决办法
3万
查看次数

UTF-8 ArrayBuffer和String之间的转换

我有一个ArrayBuffer包含使用UTF-8编码的字符串,我找不到将其转换ArrayBuffer为JS 的标准方法String(我理解使用UTF-16编码).

我已经在很多地方看到过这段代码,但我看不出它如何适用于长度超过1个字节的任何UTF-8代码点.

return String.fromCharCode.apply(null, new Uint8Array(data));
Run Code Online (Sandbox Code Playgroud)

同样,我找不到从a String转换为UTF-8编码的标准方法ArrayBuffer.

javascript string utf-8 arraybuffer

57
推荐指数
5
解决办法
8万
查看次数

在JavaScript中使用ArrayBuffer和类型数组的位置?

我正在从Node.js迁移到浏览器环境,我仍然对ArrayBuffer与类型化数组(例如Uint8Array)感到困惑.

我很困惑在哪里使用类型化数组,以及在哪里直接使用ArrayBuffer.将一个转换为另一个并不难,反之亦然,但何时使用?

例如,当我创建一个代表我代码中的一大块数据的对象时,它应该是ArrayBuffer还是Uint8Array?它取决于什么?

或者:我应该ArrayBuffer从函数(例如,外部API)或类型化数组返回吗?

请注意,我可以谷歌如何向这些类型化数组添加元素等; 我缺少的是一些简短的一般指南,在哪里使用.特别是从节点缓冲区移动时.

javascript arraybuffer

30
推荐指数
1
解决办法
7356
查看次数

附加ArrayBuffers

添加/组合ArrayBuffers的首选方法是什么?

我正在接收和解析具有各种数据结构的网络数据包.传入消息将读入ArrayBuffers.如果部分数据包到达,我需要存储它并在重新尝试解析它之前等待下一条消息.

目前我正在做这样的事情:

function appendBuffer( buffer1, buffer2 ) {
  var tmp = new Uint8Array( buffer1.byteLength + buffer2.byteLength );
  tmp.set( new Uint8Array( buffer1 ), 0 );
  tmp.set( new Uint8Array( buffer2 ), buffer1.byteLength );
  return tmp.buffer;
}
Run Code Online (Sandbox Code Playgroud)

显然你不能不得不创建一个新的缓冲区,因为ArrayBuffers的长度是固定的,但是有必要初始化类型化的数组吗?到达后我只想要能够将缓冲区视为缓冲区; 类型和结构无关紧要.

javascript typed-arrays arraybuffer

29
推荐指数
2
解决办法
2万
查看次数

axios 如何将 blob 与 arraybuffer 作为 responseType 处理?

我正在下载带有axios的 zip 文件。为了进一步处理,我需要获取已下载的“原始”数据。据我所知,在 Javascript 中有两种类型:Blob 和 Arraybuffers。两者都可以responseType在请求选项中指定。

在下一步中,需要解压缩 zip 文件。我为此尝试了两个库:js-zip 和 adm-zip。两者都希望数据是一个 ArrayBuffer。到目前为止一切顺利,我可以将 blob 转换为缓冲区。在此转换之后,adm-zip 总是很高兴地提取 zip 文件。但是,js-zip 会抱怨文件损坏,除非 zip 已'arraybuffer'作为 axios下载responseType。js-zip 不适buffer用于从blob.

这让我很困惑。我想这两个ArrayBufferBlob本质上的底层内存只是意见。将某些内容下载为 blob 与缓冲区之间可能存在性能差异。但是结果数据应该是一样的吧?

好吧,我决定进行实验并发现:

如果指定responseType: 'blob',axios 会将 转换response.data为字符串。假设您对该字符串进行哈希处理并获得哈希码 A。然后将其转换为缓冲区。对于这种转换,您需要指定一种编码。根据编码的不同,您将获得各种新的哈希值,我们称它们为 B1、B2、B3,...当指定 'utf8' 作为编码时,我将返回原始哈希值 A。

所以我猜当下载数据为 a 时'blob',axios 隐式地将其转换为用 utf8 编码的字符串。这似乎非常合理。

现在您指定responseType: 'arraybuffer'. Axios 为您提供了一个缓冲区作为response.data. 对缓冲区进行哈希处理,您会得到一个哈希码 C。此代码与 A、B1、B2 中的任何代码都不对应,...

那么当下载数据为 时'arraybuffer',你得到完全不同的数据? …

javascript blob node.js arraybuffer axios

24
推荐指数
1
解决办法
4万
查看次数