Node.js中buffer模块是什么?一文了解基本操作
Admin 2022-01-13 群英技术资讯 1078 次浏览
这篇文章给大家分享的是Node.js中buffer模块的相关内容,一些朋友可能不知道buffer是什么,下文会给大家来详细的介绍一下,另外还给大家介绍了buffer的创建、复制、拼接、截取、填充等等,感兴趣的朋友接下来就跟随小编一起了解看看吧。

我们知道,JS在对字符串、数组、数字、布尔值等都有对应的方法API进行操作处理,而在Node中,还需要文件操作、网络通信、操作数据库、数据传输等能力;文件在存储层面都是以二进制形式表示,在http的请求和响应中数据的传输也是以二进制数据进行传输,所以仅仅目前的JS能力还是不够的,也就在Node中提供了buffer模块。
即:使得NodeJS拥有像操作字符串一样来操作处理二进制数据的能力。buffer也被称为临时性暂存区,即临时存放输入和输出二进制数据的一段内存。
在对大文件进行读取操作时候,一般不会一次性全部读取到内存中,而是以流的形式读取一段数据块,而连续的数据块便形成了数据流的概念。而在对数据块读取和写入过程中,数据首先会存储在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]])
参数:
import { Buffer } from 'buffer';
const buf = Buffer.alloc(8);
console.log(buf);
// <Buffer 00 00 00 00 00 00 00 00>2.2 Buffer.allocUnsafe(size)
参数:
import { Buffer } from 'buffer';
const buf = Buffer.allocUnsafe(8);
console.log(buf);
// <Buffer e8 bf 99 e6 98 af e4 b8 80 e6>2.3 Buffer.from(string[, encoding])
创建包含传入string的新buffer
参数:
import { Buffer } from 'buffer';
const buf = Buffer.from('hello buffer');
console.log(buf);
// <Buffer 68 65 6c 6c 6f 20 62 75 66 66 65 72>2.4 Buffer.from(array)
使用 0 – 255 范围内的字节 array 分配新的 Buffer。
import { Buffer } from 'buffer';
const array = [0x62, 0x78, 0x84];
const buf = Buffer.from(array);
console.log(buf);
// <Buffer 62 78 84>3.1 Buffer.from(buffer)
参数:
import { Buffer } from 'buffer';
// 新建
const buf1 = Buffer.alloc(10, 2);
// 复制
const buf2 = Buffer.from(buf1);
console.log(buf1);
// <Buffer 02 02 02 02 02 02 02 02 02 02>
console.log(buf2);
// <Buffer 02 02 02 02 02 02 02 02 02 02>3.2 buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
将buf实例复制到target目标
import { Buffer } from 'buffer';
const buf1 = Buffer.alloc(10, 2);
const buf2 = Buffer.allocUnsafe(10)
// 将buf1复制到buf2
buf1.copy(buf2);
console.log(buf1);
// <Buffer 02 02 02 02 02 02 02 02 02 02>
console.log(buf2);
// <Buffer 02 02 02 02 02 02 02 02 02 02>4.1 Buffer.concat(list[, totalLength])
返回list中所有buffer实例连接在一起的新buffer
参数:
注意:
import { Buffer } from 'buffer';
const buf1 = Buffer.alloc(4, 2);
const buf2 = Buffer.alloc(4, 3);
const buf3 = Buffer.concat([buf1, buf2]);
console.log(buf1); // <Buffer 02 02 02 02>
console.log(buf2); // <Buffer 03 03 03 03>
console.log(buf3); // <Buffer 02 02 02 02 03 03 03 03>5.1 buf.slice([start[, end]])
从buf实例中返回新的Buffer实例,返回的新Buffer实例只是源buf实例的引用,即对新返回的实例修改会影响原有的Buffer实例
参数:
import { Buffer } from 'buffer';
const buf1 = Buffer.alloc(10, 2);
// 截取
const buf2 = buf1.slice(1,4);
// 截取部分修改
buf2[0] = 0x63;
console.log(buf1);
// <Buffer 02 63 02 02 02 02 02 02 02 02>
console.log(buf2);
// <Buffer 63 02 02>6.1 buf.fill(value[, offset[, end]][, encoding])
参数:
import { Buffer } from 'buffer';
const buf1 = Buffer.allocUnsafe(8).fill(2);
console.log(buf1);
// <Buffer 02 02 02 02 02 02 02 02>6.2 buf.write(string[, offset[, length]][, encoding])
根据 encoding 中的字符编码将 string 写入 buf 的 offset 处。
注意:length 参数是要写入的字节数。 如果 buf 没有足够的空间来容纳整个字符串,则只会写入 string 的一部分
参数:
import { Buffer } from 'buffer';
// buf1 length为12
const buf1 = Buffer.alloc(12, 3);
// write offset大于buf1.length,写入无效
buf1.write('hello', 12);
console.log(buf1);
// <Buffer 03 03 03 03 03 03 03 03 03 03 03 03>
// 部分写入
buf1.write('hello', 10);
// <Buffer 03 03 03 03 03 03 03 03 03 03 68 65>7.1 Buffer.isBuffer(obj)
检验传入obj是否为buffer
import { Buffer } from 'buffer';
const buf1 = Buffer.alloc(12, 3);
console.log(Buffer.isBuffer(buf1));
// true7.2 Buffer.isEncoding(encoding)
检查传入的编码名称是否被Buffer所支持
import { Buffer } from 'buffer';
console.log(Buffer.isEncoding('utf-8'))
// trueBuffer转String
8.1 buf.toString([encoding[, start[, end]]])
参数:
import { Buffer } from 'buffer';
const buf1 = Buffer.allocUnsafe(26)
for (let i = 0; i < 26; i++) {
// 97 是 'a' 的十进制 ASCII 值。
buf1[i] = i + 97;
}
console.log(buf1.toString())
// abcdefghijklmnopqrstuvwxyzString转Buffer
8.2 Buffer.from(string[, encoding])
参数:
import { Buffer } from 'buffer';
const buf = Buffer.from('hello buffer');
console.log(buf);
// <Buffer 68 65 6c 6c 6f 20 62 75 66 66 65 72>9.1 与Array类似点
9.2 与Array不同之处
关于Node.js中buffer模块就介绍到这,本文对Node.js中buffer模块的介绍很详细,有这方面学习需要的朋友可以参考,希望能对大家有帮助,想要了解更多大家可以关注其它的相关文章。
文本转载自PHP中文网
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Angular指令如何保持关注点的分离?本篇文章带大家了解一下通过 Angular 指令保持关注点分离的方法,希望对大家有所帮助!
作用域是指程序源代码中定义变量的区域,作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限,这篇文章主要给大家介绍了关于JavaScript静态作用域和动态作用域的相关资料,需要的朋友可以参考下
jQuery怎样获取自己除外的元素?在jquery中,想要实现获取自己除外的其他的元素,我们可以利用not()方法,这里还需要使用到this关键字,文中有示例代码供大家参考,感兴趣的朋友可以参考,接下来跟随小编来学习一下吧。
JS实现简单留言板功能 本文实例为大家分享了JS实现简单留言板的具体代码,供大家参考,具体内容如下 言归正传,之前的案例相信大家都已经完全弄清楚了,还记得我们之前统计字数的那个案例吗?忘记的可以再去翻阅一下,今天就是在这个方法的基础上,把它变成一个留言版,就像我们之前的评论一样,是不是很期待呢?先来看一下效果图 输入昵称,选择头像,输入留言,点击广播就能够在下面显示出来了,是不是很nice呢,具体怎么实现的呢,我们来看代码 <!DOCTYPE html> <html lang="en&quo ...
常见的js事件有哪些?JS事件指再浏览器窗体或者HTML元素上发生的,乐意触发JS代码块运行的行为,这篇文章主要给大家介绍窗体事件、鼠标事件和键盘事件等等,感兴趣的朋友就接着往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008