Buffer类,是用来创建一个专门存放二进制数据的缓存区。

Buffer类,是一个可以在任何模块中使用的全局类。

Buffer类使用 new 关键字创建该类的实例对象。

三种形式创建实例对象:

new Buffer(size)
//对象拥有一个length属性,属性值为缓存区大小new Buffer(array)
//直接使用一个数组来初始化缓存区new Buffer(str,[eccoding])
//直接使用一个字符串来初始化缓存区//参数一:必须,用于初始化缓存区的字符串//参数二:可选,用于指定文字编码格式的字符串,默认为utf

字符编码:

  • ascii:ASCII字符串
  • utf8:UTF-8字符串
  • utf16le:UTF-16LE字符串
  • ucs2:UCS3字符串
  • base64:经过base64编码后的字符串
  • binary:二进制数据(不推荐使用)
  • hex:使用16进制数值表示的字符串

在Node.js中,一个字符串的长度 与 根据该字符串所创建的缓存区的长度并不相同。

字符串对象一旦创建不可被修改

Buffer对象创建后可被修改

Buffer对象方法

fill(value,[offset],[end])

  • 参数一:必须,表示需要被写入的数值
  • 参数二:可选,指定从第几个字节处开始写入数值,默认为0
  • 参数三:可选,指定将数值一直写入到第几个字节处,默认Buffer对象的大小,即书写到缓存区底部

toString([encoding],[start],[end])

将Buffer对象中保存的数据转换为字符串。

  • 参数一:可选,指定Buffer对象中保存的文字编码格式,默认utf8
  • 参数二:可选,指定被转换的数据起始位置,以字节为单位
  • 参数三,可选,指定被转换的数据终止位置,以字节为单位

write(string,[offset],[length],[encoding])

向Buffer对象中写入字符串

  • 参数一:必须,指定需要写入的字符串
  • 参数二:可选,指定字符串转换为字节数据后的开始位置
  • 参数三:可选,指定字符串转换为字节数据后的长度
  • 参数四:可选,指定写入字符串时使用的编码格式,默认为utf8

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

将Buffer对象中二进制数据复制到另一个Buffer对象中。

Buffer对象与数值对象之间的相互转换

参数一:offset 指定获取数据的起始位置,以字节为单位

参数二:noAssert 布尔值,指定是否对offset的值进行验证

  • readUInt8(offset,[noAssert])
  • writeUInt8(value,offset,[noAssert])
  • readUInt16LE(offset,[noAssert])
  • writeUInt16LE(value,offset,[noAssert])
  • readUInt16BE(offset,[noAssert])
  • writeUInt16BE(value,offset,[noAssert])
  • readUInt32LE(offset,[noAssert])
  • writeUInt32LE(value,offset,[noAssert])
  • readUInt32BE(offset,[noAssert])
  • writeUInt32BE(value,offset,[noAssert])
  • readInt8(offset,[noAssert])
  • writeInt8(value,offset,[noAssert])
  • readInt16LE(offset,[noAssert])
  • writeInt16LE(value,offset,[noAssert])
  • readInt16BE(offset,[noAssert])
  • writeInt16BE(value,offset,[noAssert])
  • readInt32LE(offset,[noAssert])
  • writeInt32LE(value,offset,[noAssert])
  • readInt32BE(offset,[noAssert])
  • writeInt32BE(value,offset,[noAssert])
  • readFloatLE(offset,[noAssert])
  • writeFloatLE(value,offset,[noAssert])
  • readFloatBE(offset,[noAssert])
  • writeFloatBE(value,offset,[noAssert])
  • readDoubleLE(offset,[noAssert])
  • writeDoubleLE(value,offset,[noAssert])
  • readDoubleBE(offset,[noAssert])
  • writeDoubleBE(value,offset,[noAssert])

Buffer对象与JSON对象之间的相互转换

可以使用 JSON.stringify()将Buffer对象中保存的数据转换为一个字符串

可以使用JSON.parse()将一个经过转换后的字符串还原为一个数组

Buffer类方法

Buffer.isBuffer(obj)

判断一个对象是否为Buffer对象。

Buffer.byteLength(string,[encoding])

计算一个指定字符串的字节数。

Buffer.concat(list,[totalLength])

用于将几个Buffer对象结合创建为一个新的Buffer对象。

  • 参数一:必须,Buffer对象数组
  • 参数二:可选,指定被创建的Buffer对象的总长度

如果参数一为空数组 或 参数二等于0,返回一个长度为0的Buffer对象

如果参数一为只有一个Buffer对象,返回该Buffer对象

如果参数一拥有一个以上的Buffer对象,返回被创建的Buffer对象

Buffer.isEncoding(encoding)

检测一个字符串是否为一个有效的编码格式字符串。

StringDecoder对象

将Buffer对象中的数据转换为字符串,作用与toString()相同。 对UTF8编码格式的字符串提供更好的支持。
必须加载Node.js中的string_decoder模块,才能使用。

//加载模块
var StringDecoder = require('string_decoder').StringDecoder;//创建对象
var decoder = new StringDecoder([encoding])

decoder.write(buffer)

转载于:https://www.cnblogs.com/adhehe/p/9697448.html

Node.js知识点整理之----Buffer类相关推荐

  1. 【node.js知识点(补充版)】

    文章目录 一.[定时器] 二.[变量] 三.[字符串] 四.[数组] 五.[数组方法] 六.[数据结构Set] 七.[请求方法] 八. [HTTP状态码] 九.[npm包管理] 十.[Math对象] ...

  2. 【Node.js】中的Buffer

    目录 Node.js Buffer(缓冲区) Buffer类存在的意义 Buffer类的基本操作 创建Buffer类 写入缓冲区 判断Buffer类 将 Buffer 转换为 JSON 对象 缓冲区合 ...

  3. Node.js中的常用工具类util

    util是一个Node.js核心模块,提供常用函数的集合,用于弥补JavaScript的功能的不足,util模块设计的主要目的是为了满足Node内部API的需求.其中包括:格式化字符串.对象的序列化. ...

  4. Node.js 应用故障排查手册 —— 类死循环导致进程阻塞

    类死循环导致进程阻塞 楔子 在实践篇一中我们看到了两个表象都是和 CPU 相关的生产问题,它们基本也是我们在线上可能遇到的这一类问题的典型案例,而实际上这两个案例也存在一个共同点:我们可以通过 Nod ...

  5. node.js知识点总结

    一.当exports对象和module.exports对象指向的不是同一个对象时,以module.exports对象为准. 二.系统模块 // 1. fs.readFile() 读取文件 // 语法格 ...

  6. node.js学习-整理

    安装node.js: 去这里http://nodejs.org/download/选择Source Code下载,$ ./configure && make && su ...

  7. node.js知识点

    一.定时器 setTimeout:定时执行,设置一个事件,等待事件到达的时候只执行一次,但是执行以后定时器还在,只是没有运行. setIntevral:循环执行,设置一个时间间隔,每个一段时间都会执行 ...

  8. Java 知识点整理-7.StringBuffer类+冒泡排序+选择排序+二分法+Arrays类+基本数据类型的包装类

    1.StringBuffer类概述:线程安全的可变字符序列,一个类似于String的字符串缓冲区,但不能修改(不能像String那样用加号与其他类型数据连接),但通过某些方法调用可以改变该序列的长度和 ...

  9. 容易遗忘的JS知识点整理

    1.hasOwnProperty相关 为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法. hasOwn ...

最新文章

  1. 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题
  2. memcached的应用和兼容程序
  3. 控制ftp访问时间段
  4. (树)判断二叉树是否为BST
  5. c# 访问hbase_大数据技术 windows下C#通过Thrift操作HBase
  6. java bouncycastle_java – 使用bouncycastle进行签名和验证签名的正确方法
  7. 字符串系列函数(不断跟新)
  8. 【转】关于Azure存储账户
  9. 第四节:框架前期准备篇之进程外Session的两种配置方式
  10. 【JZOJ4817】【NOIP2016提高A组五校联考4】square
  11. 岭回归预测PM2.5
  12. 微服务开发利器:ELK进行日志采集以及统一处理
  13. socket编程(十一)
  14. Wavegrove Maji+ for Mac - 饱和压缩器插件
  15. 在linux下设置开机自动启动程序的方法
  16. 清华大学计算机系哪个专业就业前景最好,往年清华大学就业前景最好的专业
  17. matlab中的取整函数(ceil、floor、round)
  18. html给图片添加蒙版,如何使用ps给图片加蒙版 ps给图片添加蒙版的教程
  19. 滴滴征战澳洲 全球“追击”优步
  20. 装linux双系统有什么好处,科学网—Windows和Linux双系统安装教程 - 戴劭勍的博文...

热门文章

  1. 语法转换_近五年高考语法填空词性转换汇总(含答案)
  2. 编译ffmpeg+dl等库
  3. WebClient实现文件下载详解(二)
  4. 关于对接海康设备的坑
  5. 5 异常、断言和日志
  6. Git的原理详解与使用-臧雪园-专题视频课程
  7. 我是佛前的一粒佛珠(请听配乐)
  8. emc整改措施及案例_EMC整改经典对策
  9. Java基础——LinkedList源码分析
  10. 网工四年路:从小工厂到外资银行