问题标签 [arraybuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3750 浏览

javascript - 发布包装在对象内的 ArrayBuffer

我写了一点 AJAX 来获取文件客户端,以便我可以将其发布回服务器。被反对的对象作为ArrayBuffer. 但是,在将此二进制文件发布回服务器进行保存后,我需要在此文件中包含一些元数据。我已经尝试将ArrayBuffer其他字符串包装在和对象中,但是当我检查数据服务器端时,它似乎只传输了ArrayBuffer.

我尝试ArrayBuffer通过此答案将其转换为字符串:

https://stackoverflow.com/a/11058858/449511

但是, myArrayBuffer的字节长度是 519843,这会导致异常:

未捕获的 RangeError:ArrayBuffer 长度减去 byteOffset 不是元素大小的倍数。

我的理解ArrayBuffers是稀疏的,我已经阅读了 MDN 文档,但找不到太多其他内容。我很感谢有关如何将其转换ArrayBuffer为字符串或将其包装ArrayBuffer成对象的任何其他资源或想法。

这是我的 AJAX 代码片段:

0 投票
1 回答
789 浏览

javascript - WebSockets 和在发送时重用 ArrayBuffers

我正在使用 Uint8Arrays 和 ArrayBuffers 发送二进制数据。我可以通过每次创建一个新的 Uint8Array 和 ArrayBuffer 来成功发送它。

出于性能目的(减少垃圾等),我想为下一条消息重用相同的 Uint8Array 和 ArrayBuffer 。在这种情况下,每条消息都具有相同的字段,因此字节长度不是问题。我只是覆盖它。

但是,重用会导致发送的数据不正确。

我最好的猜测是,我正在为下一条消息修改 ArrayBuffer,而前一条消息仍在发送过程中。这是问题吗?如果是这样,有什么方法可以检测到 WebSocket 何时不再使用 ArrayBuffer 以便我可以将其汇集起来?如果不是,还有什么可能导致这种行为?

谢谢!

0 投票
2 回答
11361 浏览

javascript - Web Audio API 附加/连接不同的 AudioBuffers 并将它们作为一首歌曲播放

我一直在使用 Web Audio API,我正在尝试加载歌曲的多个部分并将它们附加到一个新的 ArrayBuffer 中,然后使用该 ArrayBuffer 将所有部分作为一首歌曲播放。在以下示例中,我使用相同的歌曲数据(这是一个小循环)而不是歌曲的不同部分。

问题是它仍然只播放一次而不是两次,我不知道为什么。

下载歌曲

0 投票
1 回答
3652 浏览

javascript - 如何使用 javascript 加密和解密 Uint8Array?

我想要一个 Uint8Array 的加密和解密,因为我已经从这个链接下载了 CryptoJS 库。

我已经在一个虚拟字符串上测试了 aes 密码算法,它工作正常。

现在我希望它在 Uint8Array 上实现它。这个数组保存了一个视频文件数据。

由于加密和解密适用于字符串,因此我必须将其转换为字符串,因为我已经引用了在 stackoverflow 上发布的这个问题,请单击此处

加密代码是:

但是当我运行代码时,出现以下错误:

我如何使它工作?

0 投票
3 回答
5896 浏览

javascript - 如何在 javascript 单元测试期间加载二进制文件?

在我的应用程序中,用户使用 HTML5 拖放来处理二进制文件。这部分代码工作正常。在 chrome 中,我拖动一个二进制文件并使用 FileReader 创建一个 arrayBuffer。这一切似乎都很好。我正在为此功能编写测试,但我很茫然。如何将二进制文件加载到我的单元测试中?对于我正在测试的那段代码,我只需要一个 arrayBuffer。目前,我正在手动创建 arrayBuffer,但这不是一个可持续的解决方案。为了使我的测试有效,我需要能够随时输入一个新的二进制文件并进行新的测试。我的测试环境是testacular+jasmine。

0 投票
1 回答
971 浏览

javascript - 如何在 js 中使用 arraybuffer 和类型化数组?

我有很多 0 到 255 之间的数字,我想将它们存储在一个数组中。Uint8array 是最好的,但我不知道如何使用它,也找不到任何有用的教程。一旦它们存储在数组中,如何修改/删除它们,或者添加一些新元素?

0 投票
1 回答
4976 浏览

javascript - 哪个ArrayBufferView

我正在通过 XHR 检索 ArrayBuffer,并希望使用 FileWriter 将其保存到 FileSystem API。FileWriter 需要一个 Blob,而 Blob 构造函数不会采用 ArrayBuffer,它采用 ArrayBufferView。

有很多 ArrayBufferViews 可供选择,我怎么知道哪个是正确的?

0 投票
0 回答
866 浏览

javascript - 通过数据通道发送 ArrayBuffer:DOM 异常 12

我正在尝试通过两个浏览器之间的数据通道发送一些数据。在我的代码中,我有:

在此示例中,数据通道已打开且正常工作(其类型为 WebKitDatachannel)。当我发送它时,我收到此异常:

它有什么问题?

0 投票
2 回答
28614 浏览

javascript - 在浏览器中接收 WebSocket ArrayBuffer 数据 - 改为接收字符串

我有一个 node.js 服务器应用程序和一个浏览器客户端。发送ArrayBuffer数据浏览器 - > 服务器工作正常,但服务器 - > 浏览器导致"[object ArrayBuffer]"接收到一个字符串。这发生在 Chrome 和 Firefox 的最新版本中。

服务器:

客户:

我究竟做错了什么?

编辑:

从 node.js websocket 源:

因此,如果您使用Uint8Array,它会将数据作为字符串发送,而不是sendBytessendBytes需要Buffer对象那样使用 。正如下面的答案,我需要sendBytes. 由于我无法传递ArrayBufferto sendBytes,因此我在服务器上执行了此操作:

现在它起作用了。

结论:

虽然 Chrome 和 Firefox websockets.send()Uint8Array缓冲区作为二进制数据,但似乎 node.js websockets 将其作为string数据发送,并且您需要一个Buffer缓冲区来发送二进制数据。

0 投票
7 回答
164268 浏览

javascript - 如何从 Blob 转到 ArrayBuffer

我正在研究 Blob,我注意到当您有一个 ArrayBuffer 时,您可以轻松地将其转换为 Blob,如下所示:

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