二进制类型转换

buffer转json

通过buf.toJSON方法可将Buffer对象转换为JSON对象。

例1

 var buf = new Buffer("你好");
 console.log(buf.toJSON()) // 打印 [ 228, 189, 160, 229, 165, 189 ]

json转buffer

通过new Buffer([byte数组])的方式可把JSON“转换”为Buffer对象。

例1

var jsonObj = [ 228, 189, 160, 229, 165, 189 ];
var buf = new Buffer(jsonObj); // 转换为Buffer对象
console.log(buf.toString());   // 打印你好

buffer转string

通过buf.toString()方法可将buffer转换为字符串形式。[可选]参数,表示转换时采用的编码方式,默认utf8。[可选]参数,表示buf的起始位置,默认0。[可选]参数,表示buf的结束位置,默认 buf.length 。

例1

 var buf = new Buffer([ 228, 189, 160, 229, 165, 189 ]); // 转换为Buffer对象
 console.log(buf.toString());          // 你好
 console.log(buf.toString("base64"));  // 5L2g5aW9
 console.log(buf.toString("hex"));     // e4bda0e5a5bd
 console.log(buf.toString("utf8",0,3)) // 你

string转buffer

参看本章的‘创建Buffer实例’一节。

Buffer转类型化数组ArrayBuffer

前面我们知道node.js,具有的Buffer类型有强大的功能,同时标准化的类型化数组是标准,他们相互转换也是很必要的。

Buffer类型与ArrayBuffer之间的转换,可通过Uint8Array八位无符号整数对象来进行转换,原因是Uint8Array以byte(8bit)为单元的数据数组,而Buffer也是,所以可以利用这一点轻松转换。

首先我们开发一个方法,用来进行这个转换功能。

 function toArrayBuffer(buffer) {

  // 创建一个缓存对象,长度等于buffer.length
  var ab = new ArrayBuffer(buffer.length); 
|
  // 创建一个Uint8类型的数组对象。
  var view = new Uint8Array(ab);

  for (var i = 0; i < buffer.length; ++i) {
      view[i] = buffer[i];  // 把buffer的数据拷贝到ab缓存内。
  }
  return ab;  // 返回新的 ArrayBuffer对象。
 }

测试一下:

 var buf = new Buffer("你好");
 var ab = toArrayBuffer(buf);
 console.log(ab instanceof ArrayBuffer); // true  表示Buffer对象已转为ArrayBuffer

类型化数组ArrayBuffer转Buffer

原理一样

 function toBuffer(ab) {
  var buffer = new Buffer(ab.byteLength);
  var view = new Uint8Array(ab);
  for (var i = 0; i < buffer.length; ++i) {
      buffer[i] = view[i];
  }
  return buffer;
 }

测试一下:

 var arb = new ArrayBuffer(10);
 var bf = toBuffer(arb);
 console.log(bf instanceof Buffer)  // true ,表示ArrayBuffer对象已转为Buffer