文章目录

  • node.js的Buffer(缓冲区)之二
    • 如何将Buffer转化为JSON对象
    • Buffer的合并(concat)和比较(compare)
    • Buffer的拷贝(copy)和裁剪(slice)

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);

显示如下:

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

  1. 将js对象转化为json对象

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. Node.js 与 JavaScript 基金会正式合并,JS 喜提新主场

    翘首以盼了 6 个月后,JavaScript 终于迎来了自己的"新家落户"--OpenJS 基金会于今日官宣! 图源:Node.js Foundation 如何挑战百万年薪的人工智 ...

  3. node.js 系列——Buffer

    Buffer缓存对象 纯粹的Javascript 对Unicode 很友好,但是操作二进制数据就不怎么在行了.处理TCP 数据流或者文件时,必 须要操作二进制数据流.node 提供了一些方法来创建.操 ...

  4. Node.js:Buffer基础

    文章目录 创建Buffer对象 Buffer对象的常用方法 1. Buffer.from(string[, encoding]) 2. Buffer.from(array) 3. Buffer.all ...

  5. node.js Stream Buffer FsPromise

    Stream: 类似这样:a.pipe(b).pipe(c); 我想写一个b.所以: var rs=new (require('stream').Readable)(); var ws=new (re ...

  6. 【NODE.JS】Buffer

    Buffer是一个Array的对象,主要用于操作字节. 目录 1. 模块结构 2. Buffer对象 3. Buffer内存分配 4. Buffer的转换 5. Buffer的拼接 6. 正确拼接Bu ...

  7. node.js将buffer对象转换为json对象

    d 是buffer对象 let jsstr = JSON.stringify(d);let jsondata = JSON.parse(jsstr);let buf = new Buffer(json ...

  8. Node.js的Buffer

    Buffer又名缓冲器,是一块分配的一块内存区域,可以把它看做是一个整数数组,每个整数代表一个数据字节.Buffer数据类型引入的目的帮助开发者处理二进制数据.它与下篇将要介绍的流紧密相关.当流接收的 ...

  9. 优秀的 Node.js 包汇总

    前端资源分享小程序<前端Tool>欢迎浏览. Web框架 Express - Web应用程序框架,为构建单页和多页以及混合Web应用程序提供了一组强大的功能. Next.js - Reac ...

最新文章

  1. element引入的组件大小高度不对_试水 elementplus ui 组件库
  2. 查看当前服务器中的所有的topic,创建topic,删除topic,通过shell命令发送消息,通过shell消费消息,查看topic详情,对分区数进行修改
  3. 创建vue项目(二)引入elementUi、axios、准备静态资源、封装组件(.vue,js代码等)
  4. excel值false 显示否_Python数据分析包pandas中也有Excel的IF这么简单实用函数
  5. 免费报名通道限时开启!解锁QCon「AI 时代下的融合通信技术」专场
  6. thinkphp5 mysql助手_ThinkPHP5-数据库基本操作
  7. 当年这个决定,让李飞飞奠定 AI 江湖的女王地位
  8. 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结
  9. java se 试题_javaSE试题
  10. janusgraph 可视化工具
  11. FPGA串口波特率计算方法
  12. matlab调取excel非线性拟合,用matlab实现非线性曲线拟合_matlab非线性曲线拟合
  13. ios设置导航条背景图片
  14. postman中如何自动生成签名
  15. 回首过去,抚心自问,是什么“毁了”你的大学生活?
  16. 【软件建模与UML】(持续更新)
  17. 求不定积分的几种方法
  18. Msp430学习笔记—ADC12(一)
  19. 再谈数据标准落标,论数据模型设计工具
  20. 计算机无法安装win2008,安装win7或win2008提示安装程序无法创建新的系统分区的解决方法...

热门文章

  1. 测试新人如何编写测试用例?一文带你写一个合格的测试用例
  2. 如何修改word2016模板
  3. Please sign in with an app-specific password. You can create one at appleid.apple.com.
  4. 25,UC(04) .
  5. 做seo必须要懂得的技术:黑帽seo和白帽seo的几点
  6. PLC信号处理系列之开关量信号(DI)防抖
  7. 中小企业筹资新法:应收账款也可质押融资
  8. SVN客户端安装和使用
  9. android app内部打开word pdf .doc类型文件的两种方式
  10. PHPCMSV9 企业黄页 黄页企业模板添加方法