在前端开发中,我们经常会用到对二进制数据类型的处理。比如,对一个音频文件进行解码、对图片进行编码、发送二进制数据包等操作。在这些操作中,我们需要使用到Buffer对象。
buffeream是一个npm包,它提供了对Buffer对象的封装,简化了工作流程,让处理二进制数据变得简单易懂。本文将介绍如何使用buffeream进行二进制数据处理。
安装
使用npm安装buffeream:
npm install buffeream
引入
可以使用 CommonJS 或 ES6 模块引入buffeream:
CommonJS
var Buffeream = require('buffeream');
ES6
import Buffeream from 'buffeream';
使用
创建 Buffeream 对象
创建 Buffeream 对象有多种方式:
new Buffeream(buffer)
创建一个指向buffer的 Buffeream 对象。buffer 可以是以下任意一种类型:
- Buffer 对象;
- ArrayBuffer 对象;
- SharedArrayBuffer 对象。
const buffer = Buffer.from('hello world', 'utf8'); const buffeream = new Buffeream(buffer);
new Buffeream(size)
创建一个指定长度的空 Buffeream 对象。
const buffeream = new Buffeream(8);
new Buffeream(...buffers)
创建一个包含多个Buffer片段的 Buffeream 对象。buffers 是一个包含 Uint8Array 或 Buffer 对象的数组。
const buffer1 = Buffer.from('hello', 'utf8'); const buffer2 = Buffer.from('world', 'utf8'); const buffeream = new Buffeream(buffer1, buffer2);
对 Buffeream 对象进行操作
读取字节
readByte()方法返回 Buffeream 对象中的下一个字节。
const buffeream = new Buffeream(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f])); console.log(buffeream.readByte()); // => 0x68 console.log(buffeream.readByte()); // => 0x65 console.log(buffeream.readByte()); // => 0x6c console.log(buffeream.readByte()); // => 0x6c console.log(buffeream.readByte()); // => 0x6f
写入字节
writeByte()方法向 Buffeream 对象写入一个字节。
const buffeream = new Buffeream(5); buffeream.writeByte(0x68); buffeream.writeByte(0x65); buffeream.writeByte(0x6c); buffeream.writeByte(0x6c); buffeream.writeByte(0x6f); console.log(buffeream.toBuffer()); // => <Buffer 68 65 6c 6c 6f>
读取数据
read()方法返回一个指定长度的新 Buffer。
const buffeream = new Buffeream(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f])); console.log(buffeream.read(3)); // => <Buffer 68 65 6c> console.log(buffeream.read(2)); // => <Buffer 6c 6f>
写入数据
write()方法向 Buffeream 对象写入一个新 Buffer。
const buffeream = new Buffeream(5); buffeream.write(Buffer.from([0x68, 0x65, 0x6c])); buffeream.write(Buffer.from([0x6c, 0x6f])); console.log(buffeream.toBuffer()); // => <Buffer 68 65 6c 6c 6f>
读取整数
readInt*()方法读取指定类型的整数值。Buffeream 对象以 little-endian 顺序存储数据。
- readInt8():读取一个8位有符号整数;
- readUInt8():读取一个8位无符号整数;
- readInt16():读取一个16位有符号整数;
- readUInt16():读取一个16位无符号整数;
- readInt32():读取一个32位有符号整数;
- readUInt32():读取一个32位无符号整数;
- readBigInt64():读取一个64位带符号整数(ES2020);
- readBigUInt64():读取一个64位无符号整数(ES2020)。
const buffeream = new Buffeream(Buffer.from([0xff, 0xaa, 0xbb, 0xcc])); console.log(buffeream.readInt8()); // => -1 console.log(buffeream.readUInt8()); // => 170 console.log(buffeream.readInt16()); // => -21845 console.log(buffeream.readUInt16()); // => 43791 console.log(buffeream.readInt32()); // => -889275645 console.log(buffeream.readUInt32()); // => 3405691652
写入整数
writeInt*()方法向 Buffeream 对象写入指定类型的整数值。Buffeream 对象以 little-endian 顺序存储数据。
- writeInt8():写入一个8位有符号整数;
- writeUInt8():写入一个8位无符号整数;
- writeInt16():写入一个16位有符号整数;
- writeUInt16():写入一个16位无符号整数;
- writeInt32():写入一个32位有符号整数;
- writeUInt32():写入一个32位无符号整数;
- writeBigInt64():写入一个64位带符号整数(ES2020);
- writeBigUInt64():写入一个64位无符号整数(ES2020)。
const buffeream = new Buffeream(4); buffeream.writeInt8(-1); buffeream.writeUInt8(170); buffeream.writeInt16(-21845); console.log(buffeream.toBuffer()); // => <Buffer ff aa bb cc>
转换为 Buffer
toBuffer()方法返回与 Buffeream 对象相同的 Buffer 对象。
const buffeream = new Buffeream(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f])); console.log(buffeream.toBuffer()); // => <Buffer 68 65 6c 6c 6f>
结论
Buffeream 简化了对二进制数据的处理,可以让代码更加简洁易读。这个npm包是专门为前端而设计的,如果你需要对二进制数据进行操作,就可以尝试使用 Buffeream 来让你的代码更加优雅。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066c8eccdc64669dde56a9