我正在通过XHR检索ArrayBuffer,并希望使用FileWriter将其保存到FileSystem API。 FileWriter期望Blob和Blob构造函数不会使用ArrayBuffer,它需要一个ArrayBufferView。
有很多ArrayBufferView可供选择,我怎么知道哪个是正确的?
答案 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。