NODEJS-Buffer对象

  • 构造一个指定大小的 buffer

      var newBuffer = new Buffer(1024);
      // var len = newBuffer.length;
    
  • 用指定值初始化 buffer 的内容

      // 填充第10字节开始的内容为 1 
      newBuffer.fill(1, 10);
      // 填充第10~20字节的内容为 2 
      newBuffer.fill(2, 10, 20);
    
  • 用数组初始化 buffer 的内容

      // 用数组 [0, 1, 2] 初始化
      var newBuffer = newBuffer([0, 1, 2]) 
    
  • 用字符串初始化 buffer 的内容

      // 用字符串 'xiaolai' 初始化
      var newBuffer = new Buffer('xiaolai');
      // 指定编码, 默认为 utf8,可选 ascii/utf8/utf16le/ucs2/base64/hex 等编码格式
      // var newBuffer = new Buffer('xiaolai', 'utf8');
    
  • 取出 buffer 中的字节

      // 取出第2~4个字节
      var buff = newBuffer.slice(2, 4);    
    
  • 将 buffer 转化为字符串

      // Buffer.toString([encoding], [start], [end])
      // 默认以uft-8 编码,将 buffer 转化为字符串
      var str = newbuffer.toString();
      // 以uft-8 编码,将第4~10字节转化为字符串
      var str = newbuffer.toString('utf8', 4, 10);
    
  • 将字符串写入已有的 buffer 中

      // Buffer.write(string, [offset], [length], [encoding]);
      // 在 newBuffer 的第3个字节后插入长度为3的字符串 "赖"
      newBuffer.write('赖', 3, 3)    
    
  • 使用 string_decoder 模块解决中文被截断乱码的问题

    使用场景:在 utf-8 编码中,『赖小赖』这三个字占用9个字节,如果将这九个字节分为两个buffer,一个5字节另一个4字节,分别打印时就会乱码了(因为一个汉子占用3字节). 在遇上长字符串时虽然可以将多个这样的buffer使用concact()方法合并后再调用toString()方法输出,但性能不好。

      // 使用 string_decoder 模块解决这个问题
      var StringDecoder = require('string_decoder').StringDecoder;
      var decoder = new StringDecoder();
      // 分别解码
      decoder.write(str1); // '赖'
      decoder.write(str2); // '小赖'
    
  • 使用 JSON.stringify() 将 buffer 转换为字符串

      var newBuffer = new Buffer('我叫赖小赖');
      var json = JSON.stringify(newBuffer);
      //使用 JSON.parse() 将转化后的字符串转化为数组
      var arr = JSON.parse(json);
    
  • 复制 buffer 到另一个 buffer

      // Buffer.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd])
      var oldBuffer = new Buffer('我叫赖小赖');
      var newBuffer = new Buffer(1024);
      // 将 oldBuffer 复制到 newBuffer;
      oldBuffer.copy(newBuffer);    
    
  • Buffer.isBuffer(object) 判断是否为 Buffer对象

      var isObjBuffer = Buffer.isBuffer(obj);
    
  • Buffer.byteLength(string, [encoding]) 计算字符串的字节数

      var str = '赖小赖';
      var byteLen = Buffer.byteLength(str);    
    
  • Buffer.concat(BufferList, [totalLength]) 将多个 Buffer 合并为一个

      var str1 = new Buffer('我');    
      var str2 = new Buffer('叫');    
      var str3 = new Buffer('小');    
      var str4 = new Buffer('赖');
      var str5 = Buffer.concat([str1, str2, str3, str4]); 
      console.log(str5.toString()); // "我叫小赖"