Buffer是什么

Buffer类是一个全局的直接处理二进制数据类型。它可以以各种方式构造。

纯Javascript对于Unicode的处理是友好的,而对二进制并不友好。但处理TCP数据流和文件系统,必须要处理字节流,所以node.js提供一套策略来创建和操作字节流。 

数据储存在一个Buffer实例中,一个Buffer的大小是固定的,类似于不可变的整数数组。

Buffer与字符串之间的转换需要指定明确的编码。

Buffer支持的编码:

'ascii'编码,只为7位的ASCII的数据。这个编码方法非常快!

'utf8' 编码,支持Unicode字符。

'utf16le' 编码,小端编码的Unicode字符。对(u10000 ~ u10FFFF)的支持。

'ucs2' 是 'utf16le' 编码的别名。

'base64' 是 Base64字符串编码。

'hex' 表示十六进制编码,每个byte编码为两个十六进制字符。

一个Buffer对象也可以使用一个类型数组。Buffer对象克隆到一个ArrayBuffer,用作类型数组存储支持。node.js提供的Buffer和标准类型化数组是两套不同的系统,所以Buffer和ArrayBuffer的内存不共享。

注意:虽然V8提供了标准化的类型化数组,但node.js自身定义的Buffer提供了更灵活强大的API,在之后的章节会详细讲解两者的转换与使用方法。

什么是类型化数组

可以使用类型化数组处理网络协议、二进制文件图片等二进制数据,这个在之前是无法做到的,这也是HTML5标准化支持。sex

book类型化数组包括以下类,ArrayBuffer、DataView、Int8Array、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array、Float32Array、Float64Array。

ArrayBuffer 对象

表示原始数据的缓冲区,用于存储不同类型化数组的数据。 无法从 ArrayBuffer 读取或向其写入,但是,可将其传递给类型化数组或 DataView 对象 以解释原始缓冲区。

DataView 对象

可以使用 DataView 对象 来将不同类型的二进制数据读取和写入ArrayBuffer中的任何位置。

Int8Array 对象

8 位二补码有符号整数

Uint8Array 对象

8 位无符号整数

Int16Array 对象

16 位二补码有符号整数

Uint16Array 对象

16 位无符号整数

Int32Array 对象

32 位二补码有符号整数

Uint32Array 对象

32 位无符号整数

Float32Array 对象

32 位 IEEE 浮点数

Float64Array 对象

64 位 IEEE 浮点数

之后章节将会详细介绍。