前言 JavaScript语言自身只有字符串数据类型,没有二进制数据类型。 但在处理像TCP流或文件流时,必须使用到二进制数据。因此在Node。js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。 在Node。js中,Buffer类是随Node内核一起发布的核心库。Buffer库为Node。js带来了一种存储原始数据的方法,可以让Node。js处理二进制数据,每当需要在Node。js中处理IO操作中移动的数据时,就有可能使用Buffer库。 原始数据存储在Buffer类的实例中。 一个Buffer类似于一个整数数组,但它对应于V8堆内存之外的一块原始内存。创建Buffer类 NodeBuffer类可以通过多种方式来创建。 方法1 创建长度为10字节的Buffer实例:varbufnewBuffer(10); 方法2 通过给定的数组创建Buffer实例:varbufnewBuffer(〔10,20,30,40,50〕); 方法3 通过一个字符串来创建Buffer实例:varbufnewBuffer(bianchengsanmei,utf8); utf8是默认的编码方式,此外它同样支持以下编码:ascii,utf8,utf16le,ucs2,base64和hex。写入缓冲区 语法 写入Node缓冲区的语法如下所示:buf。write(string〔,offset〔,length〕〕〔,encoding〕) 参数 参数描述如下:string写入缓冲区的字符串。offset缓冲区开始写入的索引值,默认为0。length写入的字节数,默认为buffer。lengthencoding使用的编码。默认为utf8。 返回值 返回实际写入的大小。如果buffer空间不足,则只会写入部分字符串。 实例bufnewBuffer(256);lenbuf。write(bi);lenbuf。write(bianchengsanmei);console。log(写入字节数:len); 执行以上代码,输出结果为:nodemain。js写入字节数:15从缓冲区读取数据 语法 读取Node缓冲区数据的语法如下所示:buf。toString(〔encoding〔,start〔,end〕〕〕) 参数 参数描述如下:encoding使用的编码。默认为utf8。start指定开始读取的索引位置,默认为0。end结束位置,默认为缓冲区的末尾。 返回值 解码缓冲区数据并使用指定的编码返回字符串。 实例bufnewBuffer(26);for(vari0;i26;i){buf〔i〕i97;}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。jsabcdefghijklmnopqrstuvwxyzabcdeabcdeabcde将Buffer转换为JSON对象 语法 将NodeBuffer转换为JSON对象的函数语法格式如下:buf。toJSON() 返回值 返回JSON对象。 实例varbufnewBuffer(bianchengsanmei);varjsonbuf。toJSON(buf);console。log(json); 执行以上代码,输出结果为:{type:Buffer,data:〔119,119,119,46,119,51,99,115,99,104,111,111,108,46,99,110〕}缓冲区合并 语法 Node缓冲区合并的语法如下所示:Buffer。concat(list〔,totalLength〕) 参数 参数描述如下:list用于合并的Buffer对象数组列表。totalLength指定合并后Buffer对象的总长度。 返回值 返回一个多个成员合并的新Buffer对象。 实例varbuffer1newBuffer(编程三昧);varbuffer2newBuffer(bi);varbuffer2newBuffer(bianchengsanmei);varbuffer3Buffer。concat(〔buffer1,buffer2〕);console。log(buffer3内容:buffer3。toString()); 执行以上代码,输出结果为:buffer3内容:编程三昧bianchengsanmei缓冲区比较 语法 NodeBuffer比较的函数语法如下所示,该方法在Node。jsv0。12。2版本引入:buf。compare(otherBuffer); 参数 参数描述如下:otherBuffer与buf对象比较的另外一个Buffer对象。 返回值 返回一个数字,表示buf在otherBuffer之前,之后或相同。 实例varbuffer1newBuffer(ABC);varbuffer2newBuffer(ABCD);varresultbuffer1。compare(buffer2);if(result0){console。log(buffer1在buffer2之前);}elseif(result0){console。log(buffer1与buffer2相同);}else{console。log(buffer1在buffer2之后);} 执行以上代码,输出结果为:ABC在ABCD之前拷贝缓冲区 语法 Node缓冲区拷贝语法如下所示:buf。copy(target〔,targetStart〔,sourceStart〔,sourceEnd〕〕〕) 参数 参数描述如下:targetBuffer要拷贝的Buffer对象。targetStart数字,可选,默认:0sourceStart数字,可选,默认:0sourceEnd数字,可选,默认:buffer。length 返回值 没有返回值。 实例varbuffer1newBuffer(ABC);拷贝一个缓冲区varbuffer2newBuffer(3);buffer1。copy(buffer2);console。log(buffer2content:buffer2。toString()); 执行以上代码,输出结果为:buffer2content:ABC缓冲区裁剪 Node缓冲区裁剪语法如下所示:buf。slice(〔start〔,end〕〕) 参数 参数描述如下:start数字,可选,默认:0end数字,可选,默认:buffer。length 返回值 返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引start到end的位置剪切。 实例varbuffer1newBuffer(youj);剪切缓冲区varbuffer2buffer1。slice(0,2);console。log(buffer2content:buffer2。toString()); 执行以上代码,输出结果为:buffer2content:yo缓冲区长度 语法Node缓冲区长度计算语法如下所示:buf。 返回值 返回Buffer对象所占据的内存长度。 实例varbuffernewBuffer(bianchengsanmei);缓冲区长度console。log(bufferlength:buffer。length); 执行以上代码,输出结果为:bufferlength:15 本文完,感谢阅读! 学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂! 大家好,我是编程三昧的作者隐逸王,我的公众号是编程三昧,欢迎关注,希望大家多多指教! 你来,怀揣期望,我有墨香相迎!你归,无论得失,唯以余韵相赠! 知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!