7.node.js的Buffer(缓冲区)的合并(concat)、比较(compare)、拷贝(copy)和裁剪(slice)以及如何转化为JSON对象

node.js的Buffer(缓冲区)之二

如何将Buffer转化为JSON对象

语法:

buf.toJSON()

当字符串化一个 Buffer 实例时,JSON.stringify() 会隐式地调用该 toJSON()。

返回值:JSON对象

const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
//把buf转化为JSON字符串
const jsonStr = JSON.stringify(buf);//该语句会隐式调用toJSON()方法
// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(jsonStr);
//JSON字符串不能用.来调用他的属性
console.log(jsonStr.data);

//把buf转化为JSON对象
let json = buf.toJSON();
console.log(json);
//JSON对象可以用.来调用他的属性
console.log(json.data);

//把JSON字符串变回Buffer对象
const copy = JSON.parse(jsonStr, (key, value) => {
    return value && value.type === 'Buffer' ?
        Buffer.from(value.data) :
        value;
});
// 输出: <Buffer 01 02 03 04 05>
console.log(copy);


执行结果如下:
在这里插入图片描述
切记,第一条跟第二条是两个东西,第一个是JSON字符串是字符串,第二个是JSON对象。

Buffer的合并(concat)和比较(compare)

合并语法:

Buffer.concat(list[, totalLength])

参数描述:

  • list - 用于合并的 Buffer 对象数组列表。
  • totalLength - 指定合并后Buffer对象的总长度。

返回值:返回一个多个成员合并的新 Buffer 对象。

let buffer1 = Buffer.from(('快到碗里来!'));
let buffer2 = Buffer.from(('你才到碗里去!'));
let buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());

执行结果:
在这里插入图片描述
比较语法:

buf.compare(otherBuffer);

参数描述:

  • otherBuffer - 与 buf 对象比较的另外一个 Buffer 对象。

返回值:返回一个数字,表示 buf 大于 otherBuffer ,小于otherBuffer或者等于otherBuffer。(大于是什么概念呢,其实就是跟C语言的ASCII码值的比较一样,从两个对象的第零个位置开始比较,直到某一位的ASCII码的值大于或者小于另一个对象那一位的ASCII码的值,那么就说这个对象大于或小于另一个对象,否则这两个对象相等)

let buffer1 = Buffer.from('1234');
let buffer2 = Buffer.from('1324');
let result = buffer1.compare(buffer2);

if(result < 0) {
    console.log(buffer1 + " 大于 " + buffer2);
}else if(result == 0){
    console.log(buffer1 + " 等于 " + buffer2);
}else {
    console.log(buffer1 + " 小于 " + buffer2);
}

执行结果:
在这里插入图片描述

Buffer的拷贝(copy)和裁剪(slice)

拷贝语法:

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])

参数描述:

  • targetBuffer - 要拷贝的 Buffer 对象。
  • targetStart - 数字, 可选, 默认: 0
  • sourceStart - 数字, 可选, 默认: 0
  • sourceEnd - 数字, 可选, 默认: buffer.length

返回值:没有返回值

let buf1 = Buffer.from('abcdefghijkl');
let buf2 = Buffer.from('0123456');

//将 buf2的第3到(5-1)位 从 buf1 的第2位开始插入
buf2.copy(buf1, 2,3,5);

console.log(buf1.toString());

执行结果如下:
在这里插入图片描述
裁剪语法:

buf.slice([start[, end]])

参数描述:

  • start - 数字, 可选, 默认: 0
  • end - 数字, 可选, 默认: buffer.length

返回值:返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。

let buffer1 = Buffer.from('123456');
console.log('buffer1:',buffer1);
// 剪切缓冲区
let buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());
buffer2.write('hi','utf8');
console.log('修改buffer2的内容后buffer1和buffer2的显示如下');
console.log('buffer1:', buffer1);
console.log('buffer2:',buffer2);

显示如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值