Node核心基础——缓冲区

        JavaScript善于处理字符串,但是由于它最初是被设计用来处理HTML文档的,因此它并不善于处理二进制数据。因为JavaScript中没有字节类型,也没有结构化类型,甚至没有字节数组类型,只有数值类型和字符串类型。

        为了使处理二进制数据任务变得简单,Node引入了一个二进制缓冲区,以buffer伪类中的JavaScript API形式暴露给外界。缓冲区的长度以字节为单位,并且可以随时设置和获取缓冲区中的内容。

创建缓冲区

var buf = new Buffer("hello world")

        默认是以UTF-8编码格式创建的缓冲区,想要指定编码格式的话,可以定义构造函数的第二个参数,例如:用base64编码格式创建缓冲区

var buf = new Buffer("8b76fde713ce","base64")

        如果缓冲区没有具体内容初始化,则可以通过指定容量大小来创建缓冲区,以备容纳数据。

var buf = new Buffer(1024) // 创建长度为1024字节的缓冲区
缓冲区可接受的编码格式
ASCII

该编码格式适用于ASCII字符集

UTF-8这是一种变宽度的编码格式,可以表示Unicode字符集中的任意字符,他是网络上的首选编码格式,也是创建缓冲区默认的编码格式。
Base 64这种编码格式基于64个可打印的ASCII字符来表示二进制数据,Base64通常用于在字符文档中内嵌入可以被转换成字符串的二进制数据,在需要时又可以完整无损的转回原来的二进制格式。

在缓冲区中获取和设置数据

        在创建或者获取到缓冲区之后,想要查看或者修改其内容,那么可以使用 "[ ]"操作符来访问缓冲区中的某个字节。

var buf = new Buffer("hellow world")
console.log(buf[1]) // 101  获取缓冲区中的第一个字节
buf[2] = 200 // 将第二个位置上的数据设置为200

        还可以缓冲区的长度去迭代缓冲区内容,来设置或者获取每个字节

var buf = new Buffer(10) // 创建一个长度为10的缓冲区,此时缓冲区中没有任何数据
console.log(buf.length) // 10
// 遍历给缓冲区每个字节赋值
for (let i = 0; i < buf.length; i++) {
    buf[i] = i
}
注意:
  • 如果缓冲区中的某个位置设置为一个大于255的数,那么将会使用256对改数据取模,最终将取模结果赋值给该位置;
  • 如果缓冲区中某个位置设置为256,那么该位置实际上被赋值为0;
  • 如果缓冲区某个位置设置为5.2这样的小数,那么该位置仅会存储整数部分;
  • 如果尝试给超出缓冲区便捷的位置赋值,那么赋值操作会以失败告终,缓冲区也不会发生变化。

切分缓冲区

        可以使用copy方法将缓冲区的一部分复制到另一个缓冲区中

var buf1 = new Buffer("hello world")
var buf2 = new Buffer(5)
const targetStart = 0
const sourceStart = 0
const sourceEnd = 5
buf1.copy(buf2, targetStart, sourceStart, sourceEnd)
console.log(buf2) // hello
copy方法参数

buf.copy(target, targetStart, sourceStart, sourceEnd)

参数描述
target必填,复制的目标缓冲区
targetStart非必填,Number类型,指定开始复制的位置,默认0
sourceStart非必填,Number类型,指定从哪里开始复制,默认0
sourceEnd非必填,Number类型,指定从哪里停止复制,默认缓冲区的结尾位置。

缓冲区解码

        缓冲区解码就是将缓冲区的数据转换为一个其他格式的数据,默认不规定编码格式时,会默认转换为UTF-8编码格式。例如:将一个缓冲区转换成Base64编码格式的字符串。

var base64Str = buf.toString("base64")

还可以使用toString方法,将UTF-8格式的字符串转换为base64格式的字符串

var utf8String = "my string"
var buf - new Buffer(utf8String)
var base64String = buf.toString("base64")
console.log(base64String) // bXkgc3RyaW5n

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值