日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二十五、Node中的Buffer缓冲器和EventEmitter事件触发器

發(fā)布時(shí)間:2024/10/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二十五、Node中的Buffer缓冲器和EventEmitter事件触发器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

@Author:Runsen
@Date:2020/6/5

作者介紹:Runsen目前大三下學(xué)期,專業(yè)化學(xué)工程與工藝,大學(xué)沉迷日語,Python, Java和一系列數(shù)據(jù)分析軟件。導(dǎo)致翹課嚴(yán)重,專業(yè)排名中下。.在大學(xué)60%的時(shí)間,都在CSDN。

我要反復(fù)查漏補(bǔ)缺,將2018年的東西撿回來,形成高效學(xué)習(xí)。

今天,我要寫的是Node中的Buffer緩沖器和EventEmitter事件觸發(fā)器,寫之前,先去菜鳥教程看看,偷窺學(xué)習(xí)一下JavaScript表單中的驗(yàn)證API。

文章目錄

  • Buffer緩沖器
    • 創(chuàng)建buffer類
    • 讀取緩沖區(qū)數(shù)據(jù)
    • 轉(zhuǎn)換為json格式輸出
    • 合并緩沖區(qū)
    • Buffer的操作
    • 緩沖區(qū)長度
  • EventEmitter

Buffer緩沖器

JavaScript 語言自身只有字符串?dāng)?shù)據(jù)類型,沒有二進(jìn)制數(shù)據(jù)類型。

但在處理像TCP流或文件流時(shí),必須使用到二進(jìn)制數(shù)據(jù)。因此在 Node.js中,定義了一個(gè) Buffer 類,該類用來創(chuàng)建一個(gè)專門存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。

Buffer 類在全局作用域中,因此無需使用 require(‘buffer’).Buffer。

const buf = Buffer.from('Runsen', 'ascii');// 輸出 52756e73656econsole.log(buf.toString('hex'));// 輸出 UnVuc2Vu console.log(buf.toString('base64'));

buffer類用來創(chuàng)建專門存放二進(jìn)制數(shù)據(jù)的緩沖區(qū)域,因此輸出只有二進(jìn)制

創(chuàng)建buffer類

**1、創(chuàng)建buffer類,寫入內(nèi)容 var buf = new Buffer('www.baidu.com','utf-8'); //<Buffer 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d> console.log(buf); var buf = new Buffer(26); var len = buf.write('www.baidu.com'); console.log('寫入字節(jié)數(shù):'+len); //寫入字節(jié)數(shù):13

讀取緩沖區(qū)數(shù)據(jù)

buffer.toString(encoding, star, end); encoding編碼格式 默認(rèn)使用utf8編碼格式 star:開始位置 end:結(jié)束位置

var buf = new Buffer(26); for(var i = 0; i < 26; i++){buf[i] = i; } console.log(buf); //<Buffer 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19> 十六進(jìn)制數(shù) var buf = new Buffer(26); for(let i = 0; i < 26; i++){buf[i] = i + 97; //轉(zhuǎn)換成小寫字母 } console.log(buf.toString('ascii')); //abcdefghijklmnopqrstuvwxyz console.log(buf.toString('ascii', 0, 10)); //abcdefghij 截取下標(biāo),截至下標(biāo) console.log(buf.toString('utf8', 0, 10)); //abcdefghij console.log(buf.toString(undefined, 0, 5)); //abcde 使用utf8編碼格式輸出

轉(zhuǎn)換為json格式輸出

var buf = new Buffer(26); for(let i = 0; i < 26; i++){buf[i] = i + 97; //轉(zhuǎn)換成小寫字母 } console.log(buf.toJSON(buf));

合并緩沖區(qū)

用的是Buffer.concat(list[, totalLength]);

var buf1 = new Buffer('www.baidu.com'); var buf2 = new Buffer('百度一下,你就知道'); var buf3 = Buffer.concat([buf1,buf2]); console.log(buf3.toString()); //www.baidu.com百度一下,你就知道

Buffer的操作

Buffer還支持切片、拷貝、拼接、比較等操作。

看個(gè)示例代碼,演示切片、拷貝和拼接的用法:

var buf1 = new Buffer('1234'); var buf2 = new Buffer('12567'); var bufList = [buf1, buf2]; var buf3 = Buffer.concat(bufList); var buf4 = buf3.slice(3, 8); var buf5 = new Buffer(5); buf3.copy(buf5, 0, 1);

緩沖區(qū)長度

var buf = new Buffer('Runsen'); var newbuf = buf.slice(3,5); console.log(newbuf.toString()); //se console.log('length:'+newbuf.length); //length:5

下面是Buffer緩沖器的總結(jié)

EventEmitter

Nodejs 使用了一個(gè)事件驅(qū)動(dòng)、非阻塞 IO 的模型。events模塊是事件驅(qū)動(dòng)的核心模塊。很多內(nèi)置模塊都繼承了events.EventEmitter。

var events = require('events');

nodejs的events 模塊只提供了一個(gè)對象: events.EventEmitter。EventEmitter的核心就是事件發(fā)射與事件監(jiān)聽器功能的封裝。EventEmitter的每個(gè)事件由一個(gè)事件名和若干個(gè)參數(shù)組成,事件名是一個(gè)字符串,通常表達(dá)一定的語義。對于每個(gè)事件,EventEmitter支持若干個(gè)事件監(jiān)聽器。當(dāng)事件發(fā)射時(shí),注冊到這個(gè)事件的事件監(jiān)聽器被依次調(diào)用,事件參數(shù)作為回調(diào)函數(shù)參數(shù)傳遞。

這是菜鳥教程的案例

//event.js 文件 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件觸發(fā)'); }); setTimeout(function() { event.emit('some_event'); }, 1000);

執(zhí)行結(jié)果如下:

運(yùn)行這段代碼,1 秒后控制臺輸出了 ‘some_event 事件觸發(fā)’。其原理是 event 對象注冊了事件 some_event 的一個(gè)監(jiān)聽器,然后我們通過 setTimeout 在 1000 毫秒以后向 event 對象發(fā)送事件 some_event,此時(shí)會調(diào)用some_event 的監(jiān)聽器。

下面最我編寫的代碼,以加強(qiáng)對事件驅(qū)動(dòng)的理解:

const events = require('events'); const sum = new events.EventEmitter(); let execsum = 0; let A = 0; let B = 0; function sumA() {console.log('A = ', A);A = A + 1; }// 簡寫成函數(shù),ES6語法sum.on('eventB', () => {console.log('\n');console.log('B = ', B);B = B + 1; });sum.on('eventA', sumA);// 計(jì)數(shù)器setInterval(() => {sum.emit('eventA'); }, 1000);setInterval(() => {sum.emit('eventB'); }, 2000); console.log('end');

執(zhí)行效果如下面的GIF所示。

A一秒加一次

B兩秒加一次

總結(jié)

以上是生活随笔為你收集整理的二十五、Node中的Buffer缓冲器和EventEmitter事件触发器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。