哪个ArrayBufferView

时间:2013-01-13 22:41:46

标签: javascript html5 blob filewriter arraybuffer

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

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

1 个答案:

答案 0 :(得分:15)

MDN,您可以找到所有可用ArrayBufferView子类的概述:

Type         | Size | Description                           | Equivalent C type
-------------+------+---------------------------------------+------------------
Int8Array    | 1    | 8-bit twos complement signed integer  | signed char
Uint8Array   | 1    | 8-bit unsigned integer                | unsigned char
Int16Array   | 2    | 16-bit twos complement signed integer | short
Uint16Array  | 2    | 16-bit unsigned integer               | unsigned short
Int32Array   | 4    | 32-bit twos complement signed integer | int
Uint32Array  | 4    | 32-bit unsigned integer               | unsigned int
Float32Array | 4    | 32-bit IEEE floating point number     | float
Float64Array | 8    | 64-bit IEEE floating point number     | double

基本上,这列出了阵列中每个项目占用的内存空间,以及它是普通数字还是FP数字。我不确定您熟悉哪种语言,但如果它也涵盖Java,那么它与您在byte[]short[]int[]上的选择基本相同,float[]double[](Java始终是签名的,因此该部分无关紧要。)

我们知道,像图像这样的二进制数据通常表示为字节数组。短/ int / long数组也可以,但这是浪费内存空间。如果你要在一个int数组而不是一个字节数组中存储一个100KB的图像(注意“B”代表字节,即8位),那么它将占用400KB的内存,这浪费了300KB。因此,最小的Int8Array已经满足于内存空间。如果您希望以编程方式遍历它 - 在这种情况下非常不可能 - 作为无符号数组,那么您可以选择Uint8Array而不是每个项目保存值0到{{1而不是值255-128

这是一个copy'n'paste'n'runnable启动示例,它从服务器下载一个图像文件,将其保存到临时本地存储空间并将其显示为正文中的127(小jQuery是该部分所要求的)。此示例假定<img>文件位于与JS(或HTML,如果内联JS)文件相同的基本文件夹中,该文件已从以下位置下载:

image.png

注意,从current状态开始,这仅适用于Chrome。