当前位置: 首页 > 后端技术 > Node.js

node.js学习笔记深入讲解-Buffer对象

时间:2023-04-03 19:24:19 Node.js

Buffer在node运行时自动加载,挂载在全局对象上,所以不需要使用requireBuffer是一个类似于Array的对象,但主要操作在字节上。Buffer占用的内存不是V8分配的,属于堆外内存。缓冲区类似于数组格式。内部元素为两位十六进制,即在0~255Utf-8的情况下,汉字占3位,符号和字母占1位。可以通过下标访问和分配元素。letbuffer=newBuffer(100)buffer[10]=-100//156如果赋值小于0,加256buffer[20]=300//44如果赋值大于255,减去256buffer[30]=3.1415//3位小数将丢弃小数部分并保留整数console.log(buffer[1])//将打印一个从0到255的随机值Buffer内存分配没有通过v8,因为Buffer的性能相关部分是C++实现的,所以它的内存是通过c++层面实现的。分配Buffer内存时,以8kb为界,小于8kb为小Buffer:对于小Buffer对象,采用slab分配机制,C++先申请8kb的slab内存。如果slab剩余空间足够,则将slab空间中的内存分配给新的。Buffer,如果不够,申请一个新的slabspace。大于8kb为大Buffer:大Buffer对象会直接分配一个SlowBuffer对象作为slab空间,slab空间由大Buffer对象独占。Buffer可以直接用字符串转换,支持以下格式UTF-8ACSIIUTF-16LE/UCS-2Base64HexBinaryBuffer对象尽量不要使用+操作符进行拼接,以下代码constfs=require('fs')letrs=fs.createReadStream('test.txt')letdata=''rs.on('data',function(chunk){data+=chunk})rs.on('end',function(){console.log(data)})data+=chunk这句包含toString()转换,相当于data=data.toString()+chunk.toString()。Chunk是一个Buffer对象。如果内义是宽字节编码,toString()会出现乱码。