一、buffer创建

  • Buffer.alloc( initBypeLength, fillDefValue = 0 )
let buf1 = Buffer.alloc(6, 2)
// <Buffer 02 02 02 02 02 02>
  • Buffer.allocUnsafe( initBypeLength )
let buf2 = Buffer.allocUnsafe(6)
// <Buffer 00 00 03 00 01> 不清除原来内在中的数据
  • Buffer.from('您好')
let buf3 = Buffer.from('你好');
// <Buffer e4 bd a0 e5 a5 bd>

二、buffer操作

  • 填充:buffer.fill( fillValue, startIndex, endIndex )
let buf = Buffer.alloc(4).fill(2, 1, 3)
// <Buffer 00 02 02 00>
  • 写入:buffer.write( value, startIndex, writeLength, encoding)
let buf = Buffer.alloc(6)
buf.write('你',0,3,'utf8')
buf.write('好',3,3,'utf8')
// <Buffer e4 bd a0 e5 a5 bd>
buf.toString()
// 你好

Buffer.alloc(4).writeInt8(f,1) // <Buffer 00 10 00 00>

// 大头在前 Big Endian
let buf2 = Buffer.alloc(4);
buf2.writeInt16BE(15, 0); // <Buffer 00 0f 00 00> 
buf2.readInt16BE(0)
// 小头在前 Little Endian
buf2.writeInt16LE(15, 2); // <Buffer 00 0f 0f 00>
buf2.readInt16LE(2)
  • Buffer.isBuffer()
  • Buffer.length()
  • Buffer.concat( [Buffer.from('你'), Buffer.from('好')] )

三、乱码问题

  • let { StringDecoder } = require('string_decoder');
let buf = Buffer.from('你好地球');
let buf1 = buf.slice(0, 4);
let buf2 = buf.slice(4, 7);
let buf3 = buf.slice(7);
let { StringDecoder } = require('string_decoder');
let sd = new StringDecoder(); //会把乱码缓存起来
console.log(sd.write(buf1)); //你
console.log(sd.write(buf2)); //好
console.log(sd.write(buf3)); //地球