node Buffer + events模块

在nodejs中事件处理在events模块中;使用的时候需要先引入events模块:

// 引入事件处理模块
let EventEmitter = require(“events”).EventEmitter;
// 实例化一个事件对象
let event = new EventEmitter();

注册事件:使用addListener或on、once来注册事件

event.addListener(“customEvent”, function(event) {
console.log(event);
});
// on是addListener的简写,功能完全一样
event.on(“event”, function(event) {
console.log(event);
});
// once表面该事件只能触发一次
event.once(“once”, function(event) {
console.log(event);
});

移除事件:

event.off(“event”, function(event) {
console.log(event);
});
event.removeListener(“customEvent”, handler);
// event.removeAllListeners(“customEvent”);
注意:移除事件的时候,回调函数必须是和注册事件时候的函数是同一个,否则无法移除

触发事件:
event.emit(“customEvent”, “自定义事件”);

buffer的使用

在Node.js出现之前,前端工程师只需要进行一些简单的字符串或DOM操作就可以满足业务需要,所以对二进制数据是比较陌生。Node.js出现以后,前端面对的技术场景发生了变化,可以深入到网络传输、文件操作、图片处理等领域,而这些操作都与二进制数据紧密相关。
在Node.js中,Buffer类是随Node.js内核一起发布的核心库。Buffer库为Node.js带来了一种存储原始数据的方法,可以让 Node.js处理二进制数据,每当需要在Node.js中处理I/O操作的数据时,就有可能使用 Buffer库。原始数据存储在Buffer类的实例中。一个Buffer类似于一个整数数组,但它对应于V8堆内存之外的一块原始内存。
Buffer的结构和数组很像,操作的方法也和数组类似,但数组中不能存储二进制的文件,而Buffer就是专门用来存储二进制数据,使用Buffer不需要引入模块,直接使用即可。

如何使用buffer?

旧写法:
let buf=new Buffer(10);//初始化一个字节长度为10的缓冲区
buf.fill(1);//将10个字节位都填充位数字1
buf.fill(0);//里面可以填充的最小值
buf.fill(255);//里面可以填充的最大值 因为字节数是十六机制的,最大为FF(转换为十进制为255)
buf.fill(1,1,2);//将数字1填充到buffer的1-2位置 — 在指定的位置填充指定的内容

let buf=new Buffer(“hello”);// 使用字符串初始化buffer

新用法:
1)Buffer.alloc(size[, fill[, encoding]]):返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0;
2)Buffer.from(string[, encoding]):返回一个被 string 的值初始化的新的 Buffer 实例
例如:

// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);
// 创建一个长度为 10、且用 <Buffer 61 61 61 61 61 61 61 61 61 61> 填充的 Buffer。
const buf2 = Buffer.alloc(10,“a”,“utf-8”)

// 创建一个被字符串’hello’初始化的 Buffer。
const buf3 = Buffer.from(‘hello’);

向缓冲区写入数据:

buf.write(string[, offset[, length]][, encoding])
● string - 写入缓冲区的字符串。
● offset - 缓冲区开始写入的索引值,默认为 0 。
● length - 写入的字节数,默认为 buffer.length
● encoding - 使用的编码。默认为 ‘utf8’ 。
var buf = Buffer.alloc(50);
var len = buf.write(“hello world”);//返回实际写入的大小
console.log(buf);
console.log(len);//11个字节
4)从缓冲区读取数据:
buf.toString([encoding[, start[, end]]])
● encoding - 使用的编码。默认为 ‘utf8’ 。
● start - 指定开始读取的索引位置,默认为 0。
● end - 结束位置,默认为缓冲区的末尾。
var buf = Buffer.alloc(50);
var len = buf.write(“hello world”);//返回实际写入的大小
console.log(buf.toString()); //hello world
console.log(buf.toString(‘utf8’,0,2));//he
5)其它知识点:
将buffer转换为对象:buf.toJSON或者 JSON.stringify()
缓冲区合并: Buffer.concat([buf1,buf2]);
缓冲区长度: buf.length

注意

:buffer和数组不同,buffer的容量是不能动态变化的,比如初始化时buffer的长度为10,则一直是10

总结

:buffer就是伴随着读写操作产生的东西,在存数据的时候是以16进制存储的
为什么要使用buffer?因为文件、网络的读和写都是使用的buffer,所以需要了解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值