由于历史原因,早期的JavaScript语言没有用于读取或操作二进制数据流的机制。因为JavaScript最初被设计用于处理HTML文档,而文档主要由字符串组成。
但随着Web的发展,Node.js需要处理如数据库通信、操作图像或视频,以及上传文件等复杂的业务。在早期,Node.js通过将每个字节编码为本文字符来处理二进制数据,这种方式既浪费资源又速度缓慢,不仅不可靠,还难以控制。
因此,Node.js引入Buffer类,用于在TCP流、文件系统操作和其他上下文中与八位字节流(octet streams)进行交互。
之后,随着ECMAScript 2015的发布,对于JavaScript二进制处理有了质的改善。ECMAScript 2015定义了一个TypedArray(类型化数组),期望提供一种更加高效的机制来访问和处理二进制数据。基于TypedArray, Buffer类将以更优化和适合Node.js的方式来实现Uint8Array API。
TypedArray对象描述了基础二进制数据缓冲区的类数组视图。没有名为TypedArray的全局属性,也没有直接可见的TypedArray构造函数。相反,有许多不同的全局属性,其值是特定元素类型的类型化数组构造函数,如下所示。
表4-1总结了所有TypedArray的类型及值范围。
表4-1 TypedArray的类型及值范围
更多有关TypedArray的内容,可以参阅文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray。
Buffer类是基于Uint8Array的,因此其值为0~255的整数数组。
以下是创建Buffer实例的一些示例。
Buffer可以简单理解为是数组结构,因此,可以用常见的“for..of”语法来迭代缓冲区实例。以下是示例。