Buffer在node运行时自动加载,挂载到global对象上,因此使用不须要require
Buffer是一个相似Array的对象,但它主要操做字节。
Buffer所占内存不经过V8分配,属于堆外内存。
Buffer相似于数组格式,内部元素是16进制的两位数,即0~255
Utf-8状况下,汉字占3位,符号和字母占一位node
可经过下角标访问元素和赋值。c++
let buffer = new Buffer(100) buffer[10] = -100 // 156 若是赋值比0小,则加上256 buffer[20] = 300 // 44 若是赋值比255大,则减去256 buffer[30] = 3.1415 // 3 小数则舍弃小数部分,保留整数 console.log(buffer[1]) //会打印一个0到255的随机值
Buffer内存分配不经过v8,是由于Buffer的性能相关部分是经过C++实现的,因此它的内存是经过c++层面实现的。
Buffer内存分配时,以8kb为界限数组
Buffer能够与字符串直接进行转换,支持如下格式性能
Buffer对象尽可能不要使用+运算符进行拼接,以下代码ui
const fs = require(‘fs’) let rs = fs.createReadStream(’test.txt’) let data = ‘' 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()就会致使乱码。编码