Nodejs的字节操作(Buffer)

专栏收录该内容

Hi I'm Shendi



字节操作是一个编程语言中必不可少的,而在NodeJs中也可以很方便的进行字节操作。



Buffer类

在 js 中没有二进制数据类型,但在一些情况下必须使用到二进制数据类型,比如网络通信,文件读取,加密解密...

因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

当然,在js中有 ArrayBuffer、Uint8Array可以实现类似的效果,但不是很简便,在NodeJS中以Buffer为主


在 6.0 之前直接使用 new 的方式创建Buffer,后面都通过 Buffer.from。

下面介绍常用的基本操作



Buffer.from 将对象转字节数组

通过 Buffer.from 可以将字符串、ArrayBuffer等转Buffer

示例如下

// 字符串默认编码是utf8编码
Buffer.from("Shendi");
// 也可以指定编码
Buffer.from("ShendiUtf-8", "utf8");
// 直接创建字节数组,相当于Java的 new byte[] {1, 2};
Buffer.from([1, 2]);


获取指定字节

Buffer可以理解为一个字节数组,可以直接按照数组的方式来操作

var buf = Buffer.from("Shendi");
console.log(buf.length);
console.log(buf[0]);

效果如下

效果



字节数组转字符串

通过 toString 来直接将字节数组转字符串

var buf = Buffer.from("Shendi");
console.log(buf.toString());

效果如下

效果



分割字节数组

操作时,分割字节数组是很常见的操作,类似于字符串的 substring,在Buffer中也有对应的方法,使用方式也和 substring 一致

var buf = Buffer.from([1,2,3,4,5,6,7]);
console.log(buf.subarray(0, 2));
console.log(buf.subarray(3));

效果如下

效果



连接字节数组

将多个字节数组连接起来,成为一个数组,使用 Buffer.concat,函数接收一个数组参数,示例如下

var buf1 = Buffer.from([1,2]);
var buf2 = Buffer.from([3,4]);
console.log(Buffer.concat([buf1, buf2]));

效果如下

效果



实例:加密解密数据

这里使用一个简单的盐值加密来做示例

var encrypt = {
    pwd : Buffer.from("Shendi Distributed"),
    encode(data) {
        var cData = [data.length];
        for (var i = 0; i < data.length; i++) {
            cData[i] = data[i] ^ encrypt.pwd[i % encrypt.pwd.length];
        }
        return Buffer.from(cData);
    },
    decode(data) {
        return encrypt.encode(data);
    }
};

var edata = encrypt.encode(Buffer.from("砷碲博客"));
var ddata = encrypt.decode(edata);
console.log("加密数据:", edata);
console.log("解密数据:", ddata.toString());

效果如下

效果




END

本文链接:https://sdpro.top/blog/html/article/1092.html

♥ 赞助 ♥

尽管去做,或许最终的结果不尽人意,但你不付出,他不付出,那怎会进步呢?