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

创建buffer类

1、创建长度为指定字节的buffer实例

var buffer = new Buffer(10); //创建长度为10字节的buffer实例

2、通过数组创建buffer实例

var buffer = new Buffer([10,20,30,40,50]);

3、通过一个字符串来创建buffer实例

var buffer = new Buffer('www.google.com','utf-8'); //utf-8 是默认的编码方式,此外还可以指定以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"

缓冲区长度

语法:

buf.length;

返回值:

返回 Buffer 对象所占据的内存长度。

实例:

var buffer = new Buffer('www.runoob.com');
// 缓冲区长度
console.log("buffer length: " + buffer.length); //buffer length: 14

写入缓冲区

语法:

buffer.write(string[, offset][, length][, encoding])

参数:

string:写入缓冲区的字符串。

offset:缓冲区开始写入的索引值,默认为 0 。

length:写入的字节数,默认为 buffer.length

encoding:使用的编码。默认为 'utf8' 。

返回值:

返回实际写入的大小(number类型)。如果 buffer 空间不足, 则只会写入部分字符串。

实例:

buf = new Buffer(256);
len = buf.write("www.runoob.com");
console.log("写入字节数 : "+ len); //写入字节数 : 14

从缓冲区读取数据

语法:

buf.toString([encoding][, start][, end])

参数:

encoding:使用的编码,默认为utf-8

start:指定开始读取的索引位置,默认为0

end:指定读取的结束位置,默认为缓冲区的末尾

返回值:

解码缓冲区数据,并使用指定的编码返回字符串

实例:

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
} console.log( buf.toString('ascii')); // 输出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // 输出: abcde
console.log( buf.toString('utf8',0,5)); // 输出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde

buffer对象转换成json对象

语法:

toJSON()方法

返回值:

json对象

实例:

var buf = new Buffer('www.google.com');
var json = buf.toJSON(buf);
console.log(json); //[ 119, 119, 119, 46, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109 ]

缓冲区合并

语法:

Buffer.concat(list[, totalLength])

参数:

list:用于合并的 Buffer 对象数组列表。

totalLength:指定合并后Buffer对象的总长度。

返回值:

返回一个多个成员合并的新 Buffer 对象。

实例:

var buf1 = new Buffer("谷歌网址:");
var buf2 = new Buffer("www.google.com");
var buf3 = Buffer.concat([buf1,buf2]);
console.log('buf1的内容为:'+buf1.toString()); //buf1的内容为:谷歌网址:
console.log('buf2的内容为:'+buf2.toString()); //buf2的内容为:www.google.com
console.log('buf3的内容为:'+buf3.toString()); //buf3的内容为:谷歌网址:www.google.com

缓冲区拷贝

语法:

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])

参数:

参数描述如下:

targetBuffer - 要拷贝的 Buffer 对象。

targetStart - 数字, 可选, 默认: 0

sourceStart - 数字, 可选, 默认: 0

sourceEnd - 数字, 可选, 默认: buffer.length

返回值:

没有返回值。

实例:

var buf1 = new Buffer('ABC');
// 拷贝一个缓冲区
var buf2 = new Buffer(2);
var buf3 = new Buffer(3);
var buf4 = new Buffer(5);
var buf5 = new Buffer('abcdef');
buf1.copy(buf2);
buf1.copy(buf3);
buf1.copy(buf4);
buf1.copy(buf5);
console.log("buf2 content: " + buf2.toString()); //buf2 content: AB
console.log("buf3 content: " + buf3.toString()); //buf3 content: ABC
console.log("buf4 content: " + buf4.toString()); //buf4 content: ABC 因为开辟出来的内存大了些,所以这里接一堆怪符号
console.log("buf5 content: " + buf5.toString()); //buf5 content: ABCdef

缓冲区裁剪

语法:

buf.slice([start][, end])

参数:

参数描述如下:

  • start - 数字, 可选, 默认: 0

  • end - 数字, 可选, 默认: buffer.length

返回值:

返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。

实例:

var buffer1 = new Buffer('runoob');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString()); //buffer2 content: ru

nodejs基础 -- buffer缓冲区的更多相关文章

  1. NodeJS基础-Buffer

    Buffer用于处理二进制数据流 实例类似于整数数组,大小固定 C++代码在V8堆外分配物理内存 // 创建一个长度为10,且用0填充的Buffer const buf1 = Buffer.alloc ...

  2. [转]Nodejs基础中间件Connect

    Nodejs基础中间件Connect 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的J ...

  3. Nodejs基础中间件

    Nodejs基础中间件Connect   http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript ...

  4. NIO基础学习——缓冲区

    NIO是对I/O处理的进一步抽象,包含了I/O的基础概念.我是基于网上博友的博客和Ron Hitchens写的<JAVA NIO>来学习的. NIO的三大核心内容:缓冲区,通道,选择器. ...

  5. 前端知识体系-NodeJS相关】NodeJS基础知识全面总结

    NodeJS基础知识 1. Node的全局对象和全局变量 1.1 全局对象:所有模块都可以调用的 global:表示Node所在的全局环境,类似于浏览器的window对象. process:该对象表示 ...

  6. nodejs: 理解Buffer

    学习nodejs中buffer这一章,有一段写到buffer的拼接,其中一段源码非常优美,特拿来与大家共享. var chunks = []; var size = 0; res.on('data', ...

  7. Java NIO Buffer缓冲区

    原文链接:http://tutorials.jenkov.com/java-nio/buffers.html Java NIO Buffers用于和NIO Channel交互.正如你已经知道的,我们从 ...

  8. Nio再学习之NIO的buffer缓冲区

    1. 缓冲区(Buffer): 介绍 我们知道在BIO(Block IO)中其是使用的流的形式进行读取,可以将数据直接写入或者将数据直接读取到Stream对象中,但是在NIO中所有的数据都是使用的换冲 ...

  9. Netty buffer缓冲区ByteBuf

    Netty buffer缓冲区ByteBuf byte 作为网络传输的基本单位,因此数据在网络中进行传输时需要将数据转换成byte进行传输.netty提供了专门的缓冲区byte生成api ByteBu ...

随机推荐

  1. RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示

    指定全部显示不同颜色: public void SetTextContent(string text, ColorEnum color) { Font font = , FontStyle.Bold) ...

  2. 使用Spring boot开发RestFul 风格项目PUT/DELETE方法不起作用

    在使用Spring boot 开发restful 风格的项目,put.delete方法不起作用,解决办法. 实体类Student @Data public class Student { privat ...

  3. python函数中参数是如何传递的?

    python中一切皆对象,函数中参数传递的是对象的引用. 1在函数中改变变量指向的对象,即指向不同对象. 当在函数中修改传递进来的变量指向另一个对象时,实参的对象不会改变. >>> ...

  4. DOA——MUSIC算法

    一.均匀圆阵(UCA, Uniform Circular Array)的MUSIC算法 假设一个半径为R的M元均匀圆阵的所有阵元均位于坐标系X-Y平面内,第k-1个阵元坐标为,第i个窄带信号波长为,来 ...

  5. 在verilog中调用VHDL模块

    习惯了自己发现一些小问题,既然发现了,就记下来吧,不然又要忘了,这是多么悲痛的领悟. 今天在用vivado进行块设计时所生成的顶层模块居然是用VHDL语言描述的,这时郁闷了,表示只看过VHDL语法但没 ...

  6. Golang学习途径总结

    最近要进入一个新团队,新团队对异步开发好像很重视,我对异步开发技术再次做了一调研,其中Golang,之前看过一次The way to go,感觉就是简化C加协程和通道,这次又重新翻起,首先看了一下&l ...

  7. tornado日志使用详解

    1.需求 将http访问记录,程序自定义日志输出到文件,按天分割,保留最近30天的日志. 2.使用示例 init_logging("%s/QYK.%s.%s.log" % (log ...

  8. Oracle中文字符乱码?设置Oracle客户端字符编码与服务端一致

    经常可能出现查询Oracle数据时,中文显示乱码,这很可能是因为,Oracle服务端的字符编码与客户端不一致引起的. 这时,我们需要做的是,如何设置自己的客户端字符编码与服务端一致. 查询Oracle ...

  9. Build IKAnalyzer With Solr 5.1.0

    中文分詞裡IKAnalyzer和結巴是大家比較常用的分詞器, 不過IKAnalyzer已經很久沒有更新了, IKAnalyzer中文分词器V2012使用手册也跟IK Analyer 2012-FF H ...

  10. LeetCode: Longest Valid Parentheses 解题报告

    Longest Valid Parentheses Given a string containing just the characters '(' and ')', find the length ...