这篇文章主要介绍“Nodejs中的buffer模块怎么使用”,在日常操作中,相信很多人在Nodejs中的buffer模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nodejs中的buffer模块怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!我们知道,JS在对字符串、数组、数字、布尔值等都有对应的方法API进行操作处理,而在Node中,还需要文件操作、网络通信、操作数据库、数据传输等能力;文件在存储层面都是以二进制形式表示,在http的请求和响应中数据的传输也是以二免费云主机、域名进制数据进行传输,所以仅仅目前的JS能力还是不够的,也就在Node中提供了buffer模块。即:使得NodeJS拥有像操作字符串一样来操作处理二进制数据的能力。buffer也被称为临时性暂存区
,即临时存放输入和输出二进制数据的一段内存。在之前的一篇文章聊聊Nodejs中的核心模块:stream流模块(看看如何使用)中,我们了解到在对大文件进行读取操作时候,一般不会一次性全部读取到内存中,而是以流的形式读取一段数据块,而连续的数据块便形成了数据流的概念。而在对数据块读取和写入过程中,数据首先会存储在buffer(临时性暂存区)
的内存中,以待被处理。1.1 了解buffer内存分配buffer对象的内存分配并不是在V8的堆内存中,而是在Node的C++层面实现内存的申请;为了高效的使用申请来得内存,Node中采用slab分配机制(一种动态内存管理机制)。1. 2 buffer的全局性Node在进程启动时buffer就已经加装进入内存,并将其放入全局对象,使用时候可以无需require引入,但是官方但仍然建议通过 import 或 require 语句显式地引用它。buffer实例除了可以在文件读取,http请求得到之外,还可以通过手动方式构造创建。2.1 Buffer.alloc(size[, fill[, encoding]])参数:size: buffer长度fill: 预填充值,默认值:0encoding: 如果fill是字符串,则就是字符串的编码,默认:utf-82.2 Buffer.allocUnsafe(size)参数:size: 新的buffer所需要长度以这种方式创建的 Buffer 实例的底层内存不会被初始化。 新创建的 Buffer 的内容是未知的,可能包含敏感的数据。2.3 Buffer.from(string[, encoding])创建包含传入string的新buffer参数:string: 字符串encoding: 编码,默认值:utf-82.4 Buffer.from(array)使用 0
– 255
范围内的字节 array
分配新的 Buffer
。3.1 Buffer.from(buffer)参数:buffer,要复制的buffer实例3.2 buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])将buf实例复制到target目标4.1 Buffer.concat(list[, totalLength])返回list中所有buffer实例连接在一起的新buffer参数:list:注意
:如果列表没有条目,或者 totalLength 为 0,则返回新的零长度 Buffer。如果未提供 totalLength,则从 list 中的 Buffer 实例通过相加其长度来计算。5.1 buf.slice([start[, end]])从buf实例中返回新的Buffer实例,返回的新Buffer实例只是源buf实例的引用,即对新返回的实例修改会影响原有的Buffer实例参数:start: 起始位置,默认0end: 结束位置,默认buf.length6.1 buf.fill(value[, offset[, end]][, encoding])参数:value,填充值offset: 在开始填充 buf 之前要跳过的字节数,默认值0end: 结束填充buf(不包括在内)的位置,默认值buf.lengthencoding,如果value值为字符串,则为字符串编码,默认utf-86.2 buf.write(string[, offset[, length]][, encoding])根据 encoding 中的字符编码将 string 写入 buf 的 offset 处。注意
:length 参数是要写入的字节数。 如果 buf 没有足够的空间来容纳整个字符串,则只会写入 string 的一部分参数:string: 写入的字符串值offset: 开始写入 string 之前要跳过的字节数,默认值为0length: 写入的最大字节数,默认值buf.length – offsetencoding: 编码,默认utf-87.1 Buffer.isBuffer(obj)检验传入obj是否为buffer7.2 Buffer.isEncoding(encoding)检查传入的编码名称是否被Buffer所支持Buffer转String8.1 buf.toString([encoding[, start[, end]]])参数:encoding:使用的字符串编码,默认utf-8start,开始位置,默认0end,结束位置,默认buf.lengthString转Buffer8.2 Buffer.from(string[, encoding])参数:string: 字符串encoding: 编码,默认值:utf-89.1 与Array类似点可以使用下标获取指定位置的值可以使用length属性获取Buffer大小可以使用for…of遍历9.2 与Array不同之处存储的是16进制的两位数值为0-255支持多种编码格式内存不在v8堆中分配底层有c++实现,上层由js控制到此,关于“Nodejs中的buffer模块怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注云技术网站,小编会继续努力为大家带来更多实用的文章!
相关推荐: JavaScript常见的Number对象有哪些
本篇内容主要讲解“JavaScript常见的Number对象有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript常见的Number对象有哪些”吧!Number 对象是原始数值的包装对象。Numb…