搜索
首页web前端前端问答Node.js经典技巧之Buffer(总结分享)

本篇文章给大家带来了关于nodejs中Buffer的相关知识,在Node.js中,Buffer类是随Node内核一起发布的核心库,Buffer库为Node.js带来了一种存储原始数据的方法,希望对大家有帮助。

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 类

Node Buffer 类可以通过多种方式来创建。

方法 1

创建长度为 10 字节的 Buffer 实例:

var buf = new Buffer(10);

方法 2

通过给定的数组创建 Buffer 实例:

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

方法 3

通过一个字符串来创建 Buffer 实例:

var buf = new Buffer("bianchengsanmei", "utf-8");

utf-8 是默认的编码方式,此外它同样支持以下编码:“ascii”, “utf8”, “utf16le”, “ucs2”, “base64” 和 “hex”。

写入缓冲区

语法

写入 Node 缓冲区的语法如下所示:

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

参数

参数描述如下:

  • string - 写入缓冲区的字符串。
  • offset - 缓冲区开始写入的索引值,默认为 0 。
  • length - 写入的字节数,默认为 buffer.length
  • encoding - 使用的编码。默认为 ‘utf8’ 。

返回值

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

buf = new Buffer(256);len = buf.write("bi");len = buf.write("bianchengsanmei");
 console.log("写入字节数 : "+  len);

执行以上代码,输出结果为:

$node main.js
写入字节数 : 15

从缓冲区读取数据

语法

读取 Node 缓冲区数据的语法如下所示:

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

参数

参数描述如下:

  • encoding - 使用的编码。默认为 ‘utf8’ 。

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

  • end - 结束位置,默认为缓冲区的末尾。

返回值

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

实例

buf = new Buffer(26);for (var i = 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

执行以上代码,输出结果为:

$ node main.js
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

将 Buffer 转换为 JSON 对象

语法

将 Node Buffer 转换为 JSON 对象的函数语法格式如下:

buf.toJSON()

返回值

返回 JSON 对象。

实例

var buf = new Buffer('bianchengsanmei');
var json = buf.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 对象。

实例

var buffer1 = new Buffer('编程三昧 ');
var buffer2 = new Buffer('bi');
var buffer2 = new Buffer('bianchengsanmei');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());

执行以上代码,输出结果为:

buffer3 内容: 编程三昧 bianchengsanmei

缓冲区比较

语法

Node Buffer 比较的函数语法如下所示, 该方法在 Node.js v0.12.2 版本引入:

buf.compare(otherBuffer);

参数

参数描述如下:

  • otherBuffer - 与 buf 对象比较的另外一个 Buffer 对象。

返回值

返回一个数字,表示 bufotherBuffer 之前,之后或相同。

实例

var buffer1 = new Buffer('ABC');var buffer2 = new Buffer('ABCD');var result = buffer1.compare(buffer2);
 if(result < 0) {
   console.log(buffer1 + " 在 " + buffer2 + "之前");}else if(result == 0){
   console.log(buffer1 + " 与 " + buffer2 + "相同");}else {
   console.log(buffer1 + " 在 " + buffer2 + "之后");}

执行以上代码,输出结果为:

ABC在ABCD之前

拷贝缓冲区

语法

Node 缓冲区拷贝语法如下所示:

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

参数

参数描述如下:

  • targetBuffer - 要拷贝的 Buffer 对象。
  • targetStart - 数字, 可选, 默认: 0
  • sourceStart - 数字, 可选, 默认: 0
  • sourceEnd - 数字, 可选, 默认: buffer.length

返回值

没有返回值。

实例

var buffer1 = new Buffer('ABC');
// 拷贝一个缓冲区var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

执行以上代码,输出结果为:

buffer2 content: ABC

缓冲区裁剪

Node 缓冲区裁剪语法如下所示:

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

参数

参数描述如下:

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

返回值

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

实例

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

执行以上代码,输出结果为:

buffer2 content: yo

缓冲区长度

语法 Node 缓冲区长度计算语法如下所示:

buf.length;

返回值

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

实例

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

执行以上代码,输出结果为:

buffer length: 15

更多node相关知识,请访问:nodejs 教程!!

以上是Node.js经典技巧之Buffer(总结分享)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
CSS:我可以在同一DOM中使用多个ID吗?CSS:我可以在同一DOM中使用多个ID吗?May 14, 2025 am 12:20 AM

No,youshouldn'tusemultipleIDsinthesameDOM.1)IDsmustbeuniqueperHTMLspecification,andusingduplicatescancauseinconsistentbrowserbehavior.2)Useclassesforstylingmultipleelements,attributeselectorsfortargetingbyattributes,anddescendantselectorsforstructure

HTML5的目的:创建一个更强大,更容易访问的网络HTML5的目的:创建一个更强大,更容易访问的网络May 14, 2025 am 12:18 AM

html5aimstoenhancewebcapabilities,Makeitmoredynamic,互动,可及可访问。1)ITSupportsMultimediaElementsLikeAnd,消除innewingtheneedtheneedtheneedforplugins.2)SemanticeLelelemeneLementelementsimproveaCceccessibility inmproveAccessibility andcoderabilitile andcoderability.3)emply.3)lighteppoperable popperappoperable -poseive weepivewebappll

HTML5的重要目标:增强网络开发和用户体验HTML5的重要目标:增强网络开发和用户体验May 14, 2025 am 12:18 AM

html5aimstoenhancewebdevelopmentanduserexperiencethroughsemantstructure,多媒体综合和performanceimprovements.1)SemanticeLementLike like,和ImproVereAdiability and ImproVereAdabilityAncccossibility.2)和TagsallowsemplowsemplowseamemelesseamlessallowsemlessemlessemelessmultimedimeDiaiiaemediaiaembedwitWithItWitTplulurugIns.3)

HTML5:安全吗?HTML5:安全吗?May 14, 2025 am 12:15 AM

html5isnotinerysecure,butitsfeaturescanleadtosecurityrisksifmissusedorimproperlyimplempled.1)usethesand andboxattributeIniframestoconoconoconoContoContoContoContoContoconToconToconToconToconToconTedContDedContentContentPrevulnerabilityLikeClickLickLickLickLickLickjAckJackJacking.2)

与较旧的HTML版本相比,HTML5目标与较旧的HTML版本相比,HTML5目标May 14, 2025 am 12:14 AM

HTML5aimedtoenhancewebdevelopmentbyintroducingsemanticelements,nativemultimediasupport,improvedformelements,andofflinecapabilities,contrastingwiththelimitationsofHTML4andXHTML.1)Itintroducedsemantictagslike,,,improvingstructureandSEO.2)Nativeaudioand

CSS:使用ID选择器不好吗?CSS:使用ID选择器不好吗?May 13, 2025 am 12:14 AM

使用ID选择器在CSS中并非固有地不好,但应谨慎使用。1)ID选择器适用于唯一元素或JavaScript钩子。2)对于一般样式,应使用类选择器,因为它们更灵活和可维护。通过平衡ID和类的使用,可以实现更robust和efficient的CSS架构。

HTML5:2024年的目标HTML5:2024年的目标May 13, 2025 am 12:13 AM

html5'sgoalsin2024focusonrefinement和optimization,notnewfeatures.1)增强performandemandeffifice throughOptimizedRendering.2)risteccessibilitywithrefinedibilitywithRefineDatientAttributesAndEllements.3)expliencernsandelements.3)explastsecurityConcerns,尤其是withercervion.4)

HTML5试图改进的主要领域是什么?HTML5试图改进的主要领域是什么?May 13, 2025 am 12:12 AM

html5aimedtotoimprovewebdevelopmentInfourKeyAreas:1)多中心供应,2)语义结构,3)formcapabilities.1)offlineandstorageoptions.1)html5intoryements html5introctosements introdements and toctosements and toctosements,简化了inifyingmediaembedingmediabbeddingingandenhangingusexperience.2)newsements.2)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!