手记

Node.js中缓冲区--Buffer

Node.js中Buffer简介:


JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。

Buffer常用API


/*1.Node.js中Buffer是一个典型的javascript与c++结合的模块,它将性能相关的部分用              c++实现,将非性能的部分用javascript实现。 
  2.纯javascript对字符友好但是i无法很好的处理二进制数据,在java与node中buffer中存 储的是二进制数据。当我们面对TCP流或者文件系统时,是需要处理八位流的,因此在Node.js中定义了一个Buffer类,该类用来创建一个专门的存放二进制数据的缓冲区。 
  3.代码演示:*///buffer的创建,一共有三种创建方式:从不同维度进行创建,1创建长度为n的buffer实例,创建数组为arr的buffer实例,创建字符串str的buffer实例
 //<1创建buffer实例
   var buff;
 //buff = new Buffer(n);//创建长度为n的Buffer实例
 //buff = new Buffer(arr);//创建数组为arr的buffer实例
 //buff = new Buffer(str,encoding);//创建字符串Str的Buffer实例
   buff = new Buffer(10);
   buff = new Buffer([10,20,30,40,50]);
   buff = new Buffer("www.funoob.com","utf-8");
//<2写入缓冲区
   buff = new Buffer(256);
   len = buff.write("www.runoob.com");
   console.log("写入字节数为:"+ len);
//<3从缓冲区中读数据buf = new Buffer(26);
for(var i = 0 ; i < 26 ; i++) {    
    buf[i]=+97;
}
console.log(buf.toString('ascii'));
console.log(buf.toString('ascii',0,5));//截前不截后
console.log(buf.toString('utf8',0,5));
console.log(buf.toString(undefined,0,5));//使用utf8编码,并输出abcde
//<4将Buffer转换为json对象,语法如下:buf.toJson()
var buf = new Buffer("www.runoob.com");
var json = buf.toJSON(buf);
console.log(json);
var buf = new Buffer('我爱 node.js');
var json = buf.toJSON(buf);
console.log(json);
//<5 缓冲区合并
var buffer1 = new Buffer('菜鸟教程');
var buffer2 = new Buffer('www.runoob.com');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 的内容是: "+buffer3.toString());
//<6 缓冲区比较
/*  Node Buffer 比较的函数如下所示 
    buf.compare(otherBuffer)*/
var buff1 = new Buffer('ABC');
var buff2 = new Buffer('ABCD');
var result = buff1.compare(buff2);
if(result < 0) {   
    console.log(buff1 + "在" + buff2 + "之前");
}else if(result == 0) { 
    console.log(buff1 + "在" + buff2 + "相同");
}else {   
    console.log(buff1 + "在" + buff2 + "之后");
}
//<7 拷贝缓冲区
/*  语法为 buf.copy(targetBuffer) 将调用copy方法
    的缓冲区中内容拷贝到targetBuffer中
*/
var buffer1 = new Buffer('ABC');
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2's content is : "+ buffer2.toString());
//<8 缓冲区裁剪
var buffer1 = new Buffer('runoob');
var buffer2 = buffer1.slice(0,2);//裁剪是包前不包后end索引指向的元素并不被包含在裁剪之后的内容当中
console.log("buffer2's content is : "+buffer2.toString());
//<9 缓冲区长度
/*缓冲区长度计算语法如下所示: 
  buf.length; 
  返回值:  返回buffer对象所占据的内存长度
*/
var buffer = new Buffer('我爱 www.runoob.com ');
var len = buffer.length;//计算的是buff中字节的个数,而非传统的java中length的字符长度
console.log("buffer's length is : "+len);

注意:以上代码可以直接拷贝至node.js文件当中

运行结果

$ node buff.js
写入字节数为:14
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
{ type: 'Buffer',
  data: [ 119, 119, 119, 46, 114, 117, 110, 111, 111, 98, 46, 99, 111, 109 ] }
{ type: 'Buffer',
  data: [ 230, 136, 145, 231, 136, 177, 32, 110, 111, 100, 101, 46, 106, 115 ] }

buffer3 的内容是: 菜鸟教程www.runoob.com
ABC在ABCD之前
buffer2's content is : ABC
buffer2's content is : ru
buffer's length is : 22

完。

1人推荐
随时随地看视频
慕课网APP