问题标签 [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 投票
2 回答
185 浏览

javascript - 当忽略每个字节的前导位时,是否有一种简单的方法可以从一组字节中生成一个数字?

我试图在 Google Chrome 中使用 JavaScript 从一组字节中生成一个数字,从ArrayBuffer中获取 MP3 标记信息。ID3v2 规范规定,要获取标签大小,您必须在某个位置占用 4 个字节并从中获取整数值,除了:

ID3v2 标签大小用四个字节编码,其中最高有效位(第 7 位)在每个字节中设置为零,总共 28 位。零位被忽略,因此 257 字节长的标签表示为 $00 00 02 01。

天真的方法似乎是遍历每个字节并获取每个位的值并产生一个新的 4 字节值,由原始 4 个字节的 7 个位产生,例如我们有这 4 个原始字节:

我创建了一个新的 ArrayBuffer 并遍历每个位以产生:

然后我使用Uint32Array从这个 32 位整数计算整数值

有没有更简单的方法来做到这一点?

0 投票
1 回答
506 浏览

scala - Scala 中的有限可增长数组

我希望能够将类似数组的结构增加到最大大小,之后每次添加新元素时都会从结构中删除最旧的(第一个)元素。我不知道最好的方法是什么,但一种方法是扩展 ArrayBuffer 类,并覆盖 += 运算符,这样如果已达到最大大小,则每次新元素都会删除第一个元素添加了一个。我还没有弄清楚如何正确扩展集合。到目前为止,我所拥有的是:

有人可以建议一条更好的道路和/或帮助我沿着这条道路吗?注意:我需要在 += 操作之间多次任意访问结构中的元素。

谢谢

0 投票
6 回答
4184 浏览

scala - scala ArrayBuffer 使用谓词删除所有元素

Scala 在过滤不可变序列方面非常优雅:

但是如何使用像 ArrayBuffer 这样的可变集合来做到这一点?我发现的只是删除单个元素或切片,或从另一个序列中删除元素,但没有删除谓词给出的元素。

编辑:我希望能找到类似的东西:

这个过滤器在线性时间内可以混合到任何缓冲区中,但只有 ArrayBuffer 才有意义,在 ListBuffers 上它会很慢,因为索引确实需要线性时间。

0 投票
1 回答
2578 浏览

jquery - 如何将从 JQuery.get 下载的数据转换为 ArrayBuffer?

在过去的三天里,我试图用我知道的各种关键字来寻找答案,但没能走得更远。我是 JavaScript/WebGL 的新手,所以这可能是我完全的无知,如果是这样,请原谅我。

这就是我从服务器下载二进制文件(自定义图像文件格式)并从下载的数据中读取前四个字节(Int32)的方法:

下载的数据“imageData”的大小(imageData.length)与服务器上的文件一样,所以我认为下载成功。

我打算读入下载的文件,并提取标题信息(并使用 WebGL Texture2D 中的其余图像数据进行显示)。那么问题来了:这是处理下载的自定义图像(在 WebGL 中用作纹理)的方式吗?如果没有,那么您的建议是什么?

0 投票
27 回答
488944 浏览

javascript - 在字符串和 ArrayBuffers 之间转换

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

0 投票
2 回答
17675 浏览

scala - 将 Seq 转换为 ArrayBuffer

有什么简洁的方法可以在 Scala 中将aSeq转换为?ArrayBuffer

0 投票
1 回答
975 浏览

javascript - ArrayBufferView 构造函数中的奇怪限制

TypedArray规范声明 ArrayBufferView 可以这样创建:

但是,第二个参数byteOffset有一个限制:

给定的 byteOffset 必须是特定类型的元素大小的倍数,否则会引发异常。

这意味着我们不能使用两字节视图的奇数偏移,例如:

因此,即使 [1,2] 可以正确转换为 Uint16,我也无法以这种方式访问​​这些元素。byteOffset 限制似乎显着降低了ArrayBufferView的灵活性。

有人知道为什么要施加这种限制吗?

0 投票
1 回答
758 浏览

google-chrome - 从浏览器发送二进制数据

我想知道将二进制类型的数据从客户端发送到服务器必须做什么?

我正在使用 Chrome 14,当我ArrayBuffer在客户端应用程序中发送一个帧时,我在服务器应用程序中收到一个opcode设置为的opText帧和一个字符串作为帧数据“[object ArrayBuffer]”`。

我该怎么办?

0 投票
1 回答
5117 浏览

xmlhttprequest - ArrayBuffer 与 Blob 和 XHR2

XHR2 差异状态

传输 ArrayBuffer、Blob、File 和 FormData 对象的能力。

  • ArrayBufferBlob有什么区别?
  • 我为什么要关心能够通过 XHR2 发送它们?(我能理解 File 和 FormData 的价值)
0 投票
5 回答
37516 浏览

javascript - Javascript 类型数组和字节序

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

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

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

默认情况下,“getInt32”等 DataView 函数读取大端值。

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