nodejs Buffer缓存区

Node.js中的Buffer类用于处理二进制数据,提供了多种创建、写入、读取、转换和操作缓冲区的方法。支持多种字符编码,如ASCII、UTF8等。Buffer类包括了如alloc、from等构造函数,以及write、toString、concat、compare等实用方法,方便在缓冲区和字符串之间转换及进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javascript语言自身只有字符串数据类型,没有二进制数据类型;但是在处理像TCP流或者文件流的时候,必须使用二进制数据

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

----Buffer和字符编码

Buffer实例一般用于表示编码字符的序列  通过使用显式的字符编码,就可以在Buffer实例与普通的javascript字符串之间进行相互转换

const buf = Buffer.from('hello', 'ascii');

buf.toString('hex');

buf.toString('base64');

nodejs目前支持的字符编码包括:ascii  |  utf8  |  utf16le  |  ucs2  |  base64  |  latin1  |  binary  |  hex十六进制

----创建Buffer类

--Buffer.alloc(size, fill, encoding) size为Buffer大小 fill为默认填值 encoding为指定编码  后2个参数选填

返回一个指定大小的Buffer实例,如果没有设置fill,则默认填满0

--Buffer.from(array)

返回一个被array的值初始化的新Buffer实例  传入的array的元素只能是数字,不然就会自动被0覆盖

--Buffer.from(arrayBuffer, byteOffset, length)

返回一个新建的与给定的ArrayBuffer共享同一内存的Buffer

--Buffer.from(buffer)

复制传入的Buffer实例的数据,并返回一个新的Buffer实例

--Buffer.from(string,encoding)

返回一个被string值初始化的心的Buffer实例  encoding为指定编码,选填

----写入缓存区

buf.write(string,offset,length,encoding)

string 写入缓存区的字符串 

offset 缓存区开始写入的索引值  默认0 选传

length 写入的字节数  默认为buffer.length 选传

encoding 指定编码 默认'utf8' 选传

返回实际写入的大小,如果buffer空间不足,则只会写入部分字符串

例如:let buf = Buffer.alloc(20); console.log(buf.write('www.baidu.com'));

----从缓存区读取数据

buf.toString(encoding,start,end)

encoding 指定编码 默认'utf8'

start 开始读取的索引位置 默认0 选传

end 结束读取的索引位置 默认为缓存区的末尾 选传

解码缓存区并使用指定的编码返回字符串

----Buffer转换为JSON对象

buf.toJSON() 返回JSON对象

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

例如:let buf = Buffer.from('hello'); console.log(JSON.stringify(buf));

----缓存区合并

Buffer.concat(list, totalLength)

list 用于合并的Buffer对象数组列表

totalLength 指定合并后的Buffer对象的总长度 选传

返回一个或多个buf合并的新Buffer对象

例如:let buf1 = Buffer.from('hello'); let buf2 = Buffer.from('world');  let buf3 = Buffer.concat([buf1,buf2]);

----缓存区比较

buf.compare(otherBuffer)

otherBuffer 进行比较的另一个Buffer对象

返回一个数字 返回0则相同

----拷贝缓存区

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

targetBuffer 要拷贝的Buffer对象

targetStart 要拷贝Buffer对象的起始位置 默认0 选传

sourceStart 默认0 选传

sourceEnd 默认buffer.length 选传

例如:let buf1 = Buffer.from('hello'); let buf2 = Buffer.from('world'); 

buf2.copy(buf1, 2); 将buf2插入到buf1指定索引为2开始的位置上  // heworld

----缓存区裁剪

buf.slice(start, end)

start 裁剪的起始索引位置 默认0 选传

end 裁剪的结束索引位置 默认buffer.length 选传

返回一个新的缓存区 它和旧的缓存区指向同一块内存

----缓存区长度 属性

buf.length

返回Buffer对象所占据的内存长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值