JavaScript语言本身只有字符串数据类型,没有二进制数据类型。但是在处理TCP流或文件流之类的东西时,必须使用二进制数据。因此,在Node.js中,定义了一个Buffer类,用于创建一个专门用于存储二进制数据的缓冲区。在Node.js中,Buffer类是一个随Node核心一起发布的核心库。Buffer库为Node.js带来了一种存储原始数据的方式,并允许Node.js处理二进制数据,每当您需要在Node.js中处理I/O操作中移动的数据时,都可以使用Buffer库。原始数据存储在Buffer类的实例中。Buffer类似于整数数组,但它对应于V8堆内存之外的一块原始内存。创建Buffer类节点Buffer类可以通过多种方式创建。方法一创建一个长度为10字节的Buffer实例:varbuf=newBuffer(10);方法二通过给定数组创建Buffer实例:varbuf=newBuffer([10,20,30,40,50]);方法三通过字符串创建Buffer实例:varbuf=newBuffer("bianchengsanmei",“UTF-8”);utf-8是默认编码,它还支持以下编码:“ascii”、“utf8”、“utf16le”、“ucs2”、“base64”和“hex”。WriteBuffer语法写入Node缓冲区的语法如下:buf.write(string[,offset[,length]][,encoding])参数参数说明如下:string-要写入缓冲区的字符串.offset-缓冲区开始写入的索引,默认为0。length-要写入的字节数,默认为buffer.lengthencoding-要使用的编码。默认为'utf8'。返回值返回实际写入的大小。如果缓冲区空间不足,则只写入部分字符串。例子buf=newBuffer(256);len=buf.write("bi");len=buf.write("编城三妹");console.log("写入的字节数:"+len);执行以上代码,输出结果为:$nodemain.jsWritebytes:15从缓冲区读取数据的语法读取Node缓冲区数据的语法如下:buf.toString([encoding[,start[,end]]])参数参数说明如下:encoding-要使用的编码。默认为'utf8'。start-指定开始读取的索引位置,默认为0。end-结束位置,默认为缓冲区的末尾。返回值解码缓冲区数据并返回使用指定编码的字符串。示例buf=newBuffer(26);for(vari=0;i<26;i++){buf[i]=i+97;}console.log(buf.toString('ascii'));//输出:abcdefghijklmnopqrstuvwxyzconsole.log(buf.toString('ascii',0,5));//输出:abcdeconsole.log(buf.toString('utf8',0,5));//输出:abcdeconsole.log(buf.toString(undefined,0,5));//使用'utf8'编码,输出:abcde执行上面的代码,输出结果为:$nodemain.jsabcdefghijklmnopqrstuvwxyzabcdeabcdeabcdeConvertBuffertoJSONobjectSyntaxConvertNodeBuffertoJSONobject该函数的语法格式如下:buf.toJSON()返回一个JSON对象。例子varbuf=newBuffer('边城三美');varjson=buf.toJSON(buf);控制台日志(json);执行以上代码,输出结果为:{type:'Buffer',data:[119,119,119,46,119,51,99,115,99,104,111,111,108,46,99,110]}缓冲区合并语法节点缓冲区合并语法如下:Buffer.concat(list[,totalLength])parameter参数说明如下:list-待合并的Buffer对象数组列表。totalLength-指定合并的Buffer对象的总长度。返回值返回一个合并了多个成员的新Buffer对象。例子varbuffer1=newBuffer('编程三麦');varbuffer2=newBuffer('bi');varbuffer2=newBuffer('变程三妹');varbuffer3=Buffer.concat([buffer1,buffer2]);console.log("buffer3内容:"+buffer3.toString());执行以上代码,输出结果为:buffer3内容:编程变程三美缓冲区比较语法NodeBuffer比较函数语法如下,该方法在Node.jsv0.12.2中实现,引入:buf.compare(otherBuffer);参数说明如下:otherBuffer-要与buf对象进行比较的另一个Buffer对象。返回值返回一个数字,表示buf在otherBuffer之前、之后或相同。示例varbuffer1=newBuffer('ABC');varbuffer2=newBuffer('ABCD');varresult=buffer1.compare(buffer2);if(result<0){console.log(buffer1+"in"+buffer2+"before");}elseif(result==0){console.log(buffer1+"与"+buffer2+"相同");}else{console.log(buffer1+"at"+buffer2+"After");}执行以上代码,输出结果为:ABCcopybufferbeforeABCDSyntaxNodebuffercopy语法如下:buf.copy(target[,targetStart[,sourceStart[,sourceEnd]]])parameterparameters说明如下:targetBuffer-要复制的Buffer对象。targetStart-数字,可选,默认值:0sourceStart-数字,可选,默认值:0sourceEnd-数字,可选,默认值:buffer.length返回值无返回值。示例varbuffer1=newBuffer('ABC');//复制缓冲区varbuffer2=newBuffer(3);buffer1.copy(buffer2);console.log("buffer2content:"+buffer2.toString());执行以上代码,输出结果为:buffer2content:ABCbufferclippingNodebufferclipping语法如下:buf.slice([start[,end]])参数说明如下:start-number,optional,默认值:0end-数字,可选,默认值:buffer.length返回一个新缓冲区,它指向与旧缓冲区相同的内存,但从索引开始到结束。示例varbuffer1=newBuffer('youj');//切割缓冲区varbuffer2=buffer1.slice(0,2);console.log("buffer2内容:"+buffer2.toString());执行以上代码,输出结果为:buffer2content:yobufferlengthsyntax节点缓冲区长度计算语法如下:buf.length;返回值返回Buffer对象占用的内存长度。例子varbuffer=newBuffer('bianchengsanmei');//缓冲区长度console.log("缓冲区长度:"+buffer.length);执行以上代码,输出结果为:bufferlength:15~~本文结束,感谢阅读!~学习有趣的知识,认识有趣的朋友,塑造有趣的灵魂!大家好,我是〖编程三昧〗的作者王隐,我的公众号是《编程三昧》,欢迎关注,希望大家多多指教!你来,怀揣期待,我以墨香迎接你!您归来,不分得失,只送回味!知识与技能并重,内功与外功并重,理论与实践两手抓,两手都要用力!
