欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

有关于node缓冲区的学习

程序员文章站 2024-03-25 15:27:40
...

1.node中为什么需要缓冲区?
js最初设计用来处理html文件,所以他并不适合用来处理二进制数据(对于字节的处理),但是在实际使用中,需要很多处理数据库通信,视频,上传文件等操作,都需要大量使用二进制数据操作。早期的node是通过将每个字节编码成文本字符来处理二进制数据的,资源浪费,速度缓慢,难以控制
于是node引入了一个二进制缓冲区来实现缓冲区的长度以字节为单位,并可以随机设置和获取缓冲区的数据(便于操作)

2 .创建缓冲区
创建方法:

var buf = new Buffer('Hello world');

第一个参数引号中间就是建立的缓冲区的内容。
第二个参数可选。是指定编码格式,不写的话默认utf8
可被接受的编码格式以及标识符

  • asciI–ASCII 仅适用于ASCII字符集
  • utf8–UTF-8 任意字符 首选编码 默认编码
  • base64–Base64基于64个可打印的ASCII字符表示二进制数据

如果没有具体内容初始化,则可以用大小来进行初始化:

var buf = new Buffer(1024);//即创建长度为1024字节的缓冲区

需要注意的是当创建一个已经被初始化的缓冲区时,缓冲区所包含的数据并非是0,而是一些随机数据

var buf = new Buffer();
console.log(buf[100])//->5(随机值)

可以吧缓冲区当做数组理解,赋值,修改等

buf[2] = 2;//将第二个位置设定为2

还有length属性

var buf = new Buffer(100);
console.log(buf.length);

//->100
切分缓冲区
将指定缓冲区提取出来,通过指定起始位置和结束位置来切分缓冲区

var buf = new Buffer('baiyutingchoujiojio');
var smallerbuf = buf.slice(9,19);
console.log(smallerbuf.toString());//->choujiojio

截取的时候,起始位置就是从0开始数的第几位,结束位置是数出来的加一位
要注意的是,因为子缓冲区是从父缓冲区切分出来的,并没有为子缓冲区开辟新的内存,所以在修改父缓冲区的时候,在范围内的子缓冲区也会受到影响,而且创建子缓冲区后,父缓冲区不会被垃圾回收器回收,容易造成内存泄漏
复制缓冲区
即申请一块新的内存,灵活控制复制的范围
copy是原缓冲区的方法,有四个参数分别新缓冲区,开始粘贴位置,开始复制位置,结束复制位置

var buf1 = new Buffer('baiyutingchoujiojio');
var buf2 = new Buffer(10);
buf1.copy(buf2,0,9,19);
console.log(buf2.toString());//->choujiojio

可以避免产生内存泄漏问题
缓冲区解码
就是在tostring()里加参数,参数为"编码字符名",同样UTF-8默认

vat b64str = buf.tostring("base64");

在tostring() 里还可以加第二第三个参数,分别为 指定被转换数据的起始位置和终止位置,以字节为单位

相关标签: node 缓冲区