前言
在前端开发的过程中,我们经常需要处理二进制数据,比如对文件的读取、hash 计算等。Node.js 原生提供了 Buffer 对象来处理二进制数据,而在浏览器环境下则需要使用 TypedArray 来处理。但是,TypedArray 相对于 Buffer 对象来说,较为灵活但操作复杂。而 buffer-async 这个 npm 包则是可以在浏览器环境下使用,且操作上比 TypedArray 更方便的一种处理二进制数据的方式。
安装
在终端中执行以下命令即可:
npm install buffer-async
使用
安装成功后,我们可以通过 import 或 require 的方式引入该库:
import BA from 'buffer-async' // const BA = require('buffer-async').default
创建 BufferAsync 实例
调用 BA 构造函数可以创建一个 BufferAsync 类的实例:
const ba = new BA(bufferSize = 1024 * 1024, maxQueueSize = 1024 * 1024 * 1024)
参数说明:
- bufferSize:缓存区大小,默认值为 1MB
- maxQueueSize:最大队列大小,默认值为 1GB
写入数据
要写入数据到 BufferAsync 实例,我们通过 ba.write(data) 实现。该方法返回一个 Promise 对象,可以使用 await 获取结果:
const data = 'hello world' await ba.write(data)
读取数据
读取数据同样要使用 Promise 来完成:
const readLength = 5 const res = await ba.read(readLength) console.log(res) // <Buffer 68 65 6c 6c 6f>
获取 buffer 对象
需要读取 BufferAsync 实例中所有数据时,可使用 ba.toBuffer()
方法获取 buffer 对象:
const bufferData = ba.toBuffer() console.log(bufferData.toString()) // 'hello world'
实例方法
BufferAsync 实例提供了一些其他的非常方便的方法,在这里简单介绍一下:
ba.getBufferLength()
: 获取当前实例中的 buffer 实际长度。ba.resize()
: 改变当前实例缓存区的大小。该方法并不会清空缓存区中的数据,因此需要先使用toBuffer()
方法获取数据后再进行调用。回调接受参数newBufSize
,表示修改后新的缓存区大小。ba.drop(readLength)
: 顾名思义,该方法可以从缓存队列中剔除指定长度的数据。
示例
下面给出一个使用示例,演示如何计算一个文件的 sha256 哈希值。
-- -------------------- ---- ------- -- ------------- ------- -- -------- ---------------- - ------ --- --------------- -- - ----- --- - --- ---------------- --------------- ------------- ----- ---------- - -- -- ------------------------- ---------- -- - ----- -------- -------- - ----- -- - --- ---- ----- ---- - ----- ------------------------------- -------------- --------------- ----------------------------- ---- -- --- - ---------------------------- ----- ---- - ----- -------- ------ - ----- ---- - ----- ---------------- ------- - - -- - - ------------ - -- ----- - ----- ----- - ------------- - - ----- ----- --------------- - ----- -------- - ------
结论
buffer-async 的使用是非常简单和方便的,它能够优雅的处理二进制数据,加速了我们的前端开发。同时,它也有很好的兼容性,在不同的环境中都能够使用。因此,在前端开发中,有必要了解并试用这个 npm 包。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066c8eccdc64669dde55cd