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

完。

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

目录
相关文章
|
8月前
|
缓存 JavaScript 前端开发
【Node系列】Buffer详解
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。 Node.js中的Buffer是一个全局对象,属于固有(built-in)类型的全局变量,不需要使用require函数导入。它允许直接操作原始内存,主要用于处理二进制数据流。Buffer实例对象的结构和整数数组很像,但Buffer的大小是固定的且在V8堆外分配物理内存。
85 2
|
8月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
341 0
|
8月前
|
JavaScript 前端开发 API
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
110 0
|
3月前
|
存储 JSON JavaScript
Node.js Buffer(缓冲区)
10月更文挑战第4天
48 4
|
7月前
|
存储 JSON JavaScript
Node.js Buffer(缓冲区)
Node.js Buffer(缓冲区)
46 1
|
8月前
|
JavaScript 网络协议 数据处理
Node.js中的Buffer与Stream:深入解析与使用
【4月更文挑战第30天】本文深入解析了Node.js中的Buffer和Stream。Buffer是处理原始数据的全局对象,适用于TCP流和文件I/O,其大小在V8堆外分配。创建Buffer可通过`alloc`和`from`方法,它提供了读写、切片和转换等操作。Stream是处理流式数据的抽象接口,分为可读、可写、双工和转换四种类型,常用于处理大量数据而无需一次性加载到内存。通过监听事件和调用方法,如读取文件的可读流示例,可以实现高效的数据处理。理解和掌握Buffer及Stream能提升Node.js应用的性能。
|
8月前
|
JavaScript
Node.js之Buffer(缓冲器)
Node.js之Buffer(缓冲器)
|
8天前
|
JavaScript
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
nodejs安装之npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED reason: certificate has expired-证书错误通用问题解决方案-优雅草央千澈
|
2月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
38 2
2024年5月node.js安装(winmac系统)保姆级教程