node.js中缓冲区--Buffer-阿里云开发者社区

开发者社区> markfork> 正文

node.js中缓冲区--Buffer

简介: Node.js中Buffer简介: JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件流时,必须使用到二进制数据。
+关注继续查看

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

完。

博客搬家:大坤的个人博客
欢迎评论哦~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4395 0
C#不为人知的秘密-缓冲区“.NET研究”溢出
  开场白   各位朋友们,当你们看到网上传播关于微软windows、IE对黑客利用“缓冲区溢出”、0day漏洞攻击的新闻,是否有过自己也想试试身手,可惜无从下手的感慨?本文将完全使用C#语言,探索那些不为人知的秘密。
783 0
嵌入式 环形缓冲区的设计与实现
环形缓冲区是嵌入式系统中十分重要的一种数据结构,比如在一个视频处理的机制中,环形缓冲区就可以理解为数据码流的通道,每一个通道都对应着一个环形缓冲区,这样数据在读取和写入的时候都可以在这个缓冲区里循环进行,程序员可以根据自己需要的数据大小来决定自己使用的缓冲区大小。
694 0
Flink-CEP之带版本的共享缓冲区
带版本的共享缓冲区 当股票模式以一个事件流作为输入时,状态转换将会作用于事件流从而引起事件的状态变化。结合窗口对参与匹配的事件的限制以及模式中结合事件上下文(状态)的过滤条件,同一事件流随着时间的流动或者多次运行都会产生多种不同的匹配结果。
1569 0
+关注
markfork
简介:个人专注后端开发、在MySQL数据库、Java并发编程、有比较深入的学习,平时喜欢研究一些中间件的相关理论及实操、如Redis、Nginx。 愿景:打造个人知识ip 个人博客:markfork.com 个人简书:https://www.jianshu.com/u/c1
60
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载