nodejs基礎(chǔ)之buffer緩沖區(qū)用法分析
本文實(shí)例講述了nodejs基礎(chǔ)之buffer緩沖區(qū)用法。分享給大家供大家參考,具體如下:
JavaScript 語(yǔ)言自身只有字符串?dāng)?shù)據(jù)類(lèi)型,沒(méi)有二進(jìn)制數(shù)據(jù)類(lèi)型。但在處理像TCP流或文件流時(shí),必須使用到二進(jìn)制數(shù)據(jù)。因此在 Node.js中,定義了一個(gè) Buffer 類(lèi),該類(lèi)用來(lái)創(chuàng)建一個(gè)專(zhuān)門(mén)存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。在 Node.js 中,Buffer 類(lèi)是隨 Node 內(nèi)核一起發(fā)布的核心庫(kù)。Buffer 庫(kù)為 Node.js 帶來(lái)了一種存儲(chǔ)原始數(shù)據(jù)的方法,可以讓 Node.js 處理二進(jìn)制數(shù)據(jù),每當(dāng)需要在Node.js 中處理I/O操作中移動(dòng)的數(shù)據(jù)時(shí),就有可能使用 Buffer 庫(kù)。原始數(shù)據(jù)存儲(chǔ)在 Buffer 類(lèi)的實(shí)例中。一個(gè) Buffer 類(lèi)似于一個(gè)整數(shù)數(shù)組,但它對(duì)應(yīng)于 V8 堆內(nèi)存之外的一塊原始內(nèi)存。
創(chuàng)建buffer類(lèi)
1、創(chuàng)建長(zhǎng)度為指定字節(jié)的buffer實(shí)例
var buffer = new Buffer(10); //創(chuàng)建長(zhǎng)度為10字節(jié)的buffer實(shí)例
2、通過(guò)數(shù)組創(chuàng)建buffer實(shí)例
var buffer = new Buffer([10,20,30,40,50]);
3、通過(guò)一個(gè)字符串來(lái)創(chuàng)建buffer實(shí)例
var buffer = new Buffer('www.google.com','utf-8');
//utf-8 是默認(rèn)的編碼方式,此外還可以指定以下編碼:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"
緩沖區(qū)長(zhǎng)度
語(yǔ)法:
buf.length;
返回值:
返回 Buffer 對(duì)象所占據(jù)的內(nèi)存長(zhǎng)度。
實(shí)例:
var buffer = new Buffer('www.runoob.com');
// 緩沖區(qū)長(zhǎng)度
console.log("buffer length: " + buffer.length); //buffer length: 14
寫(xiě)入緩沖區(qū)
語(yǔ)法:
buffer.write(string[, offset][, length][, encoding])
參數(shù):
- string:寫(xiě)入緩沖區(qū)的字符串。
- offset:緩沖區(qū)開(kāi)始寫(xiě)入的索引值,默認(rèn)為 0 。
- length:寫(xiě)入的字節(jié)數(shù),默認(rèn)為
buffer.length - encoding:使用的編碼。默認(rèn)為 '
utf8' 。
返回值:
返回實(shí)際寫(xiě)入的大?。╪umber類(lèi)型)。如果 buffer 空間不足, 則只會(huì)寫(xiě)入部分字符串。
實(shí)例:
buf = new Buffer(256);
len = buf.write("www.runoob.com");
console.log("寫(xiě)入字節(jié)數(shù) : "+ len); //寫(xiě)入字節(jié)數(shù) : 14
從緩沖區(qū)讀取數(shù)據(jù)
語(yǔ)法:
buf.toString([encoding][, start][, end])
參數(shù):
- encoding:使用的編碼,默認(rèn)為utf-8
- start:指定開(kāi)始讀取的索引位置,默認(rèn)為0
- end:指定讀取的結(jié)束位置,默認(rèn)為緩沖區(qū)的末尾
返回值:
解碼緩沖區(qū)數(shù)據(jù),并使用指定的編碼返回字符串
實(shí)例:
buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
}
console.log( buf.toString('ascii')); // 輸出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // 輸出: abcde
console.log( buf.toString('utf8',0,5)); // 輸出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 編碼, 并輸出: abcde
buffer對(duì)象轉(zhuǎn)換成json對(duì)象
語(yǔ)法:
toJSON()方法
返回值:
json對(duì)象
實(shí)例:
var buf = new Buffer('www.google.com');
var json = buf.toJSON(buf);
console.log(json); //[ 119, 119, 119, 46, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109 ]
緩沖區(qū)合并
語(yǔ)法:
Buffer.concat(list[, totalLength])
參數(shù):
- list:用于合并的 Buffer 對(duì)象數(shù)組列表。
- totalLength:指定合并后Buffer對(duì)象的總長(zhǎng)度。
返回值:
返回一個(gè)多個(gè)成員合并的新 Buffer 對(duì)象。
實(shí)例:
var buf1 = new Buffer("谷歌網(wǎng)址:");
var buf2 = new Buffer("www.google.com");
var buf3 = Buffer.concat([buf1,buf2]);
console.log('buf1的內(nèi)容為:'+buf1.toString()); //buf1的內(nèi)容為:谷歌網(wǎng)址:
console.log('buf2的內(nèi)容為:'+buf2.toString()); //buf2的內(nèi)容為:www.google.com
console.log('buf3的內(nèi)容為:'+buf3.toString()); //buf3的內(nèi)容為:谷歌網(wǎng)址:www.google.com
緩沖區(qū)拷貝
語(yǔ)法:
buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
參數(shù):
參數(shù)描述如下:
- targetBuffer - 要拷貝的 Buffer 對(duì)象。
- targetStart - 數(shù)字, 可選, 默認(rèn): 0
- sourceStart - 數(shù)字, 可選, 默認(rèn): 0
- sourceEnd - 數(shù)字, 可選, 默認(rèn):
buffer.length
返回值:
沒(méi)有返回值。
實(shí)例:
var buf1 = new Buffer('ABC');
// 拷貝一個(gè)緩沖區(qū)
var buf2 = new Buffer(2);
var buf3 = new Buffer(3);
var buf4 = new Buffer(5);
var buf5 = new Buffer('abcdef');
buf1.copy(buf2);
buf1.copy(buf3);
buf1.copy(buf4);
buf1.copy(buf5);
console.log("buf2 content: " + buf2.toString()); //buf2 content: AB
console.log("buf3 content: " + buf3.toString()); //buf3 content: ABC
console.log("buf4 content: " + buf4.toString()); //buf4 content: ABC 因?yàn)殚_(kāi)辟出來(lái)的內(nèi)存大了些,所以這里接一堆怪符號(hào)
console.log("buf5 content: " + buf5.toString()); //buf5 content: ABCdef
緩沖區(qū)裁剪
語(yǔ)法:
buf.slice([start][, end])
參數(shù):
參數(shù)描述如下:
- start - 數(shù)字, 可選, 默認(rèn): 0
- end - 數(shù)字, 可選, 默認(rèn):
buffer.length
返回值:
返回一個(gè)新的緩沖區(qū),它和舊緩沖區(qū)指向同一塊內(nèi)存,但是從索引 start 到 end 的位置剪切。
實(shí)例:
var buffer1 = new Buffer('runoob');
// 剪切緩沖區(qū)
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString()); //buffer2 content: ru
希望本文所述對(duì)大家nodejs程序設(shè)計(jì)有所幫助。
相關(guān)文章
利用nodeJs anywhere搭建本地服務(wù)器環(huán)境的方法
今天小編就為大家分享一篇利用nodeJs anywhere搭建本地服務(wù)器環(huán)境的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
一文教你學(xué)會(huì)Nodejs中puppeteer的簡(jiǎn)單使用
Puppeteer是一個(gè)控制headless Chrome的Node.js API ,是一個(gè) Node.js庫(kù),在瀏覽器中手動(dòng)完成的大多數(shù)事情都可以通過(guò)使用 Puppeteer完成,本文主要介紹了Puppeteer的簡(jiǎn)單使用,希望對(duì)大家有所幫助2024-01-01
Node.js如何實(shí)現(xiàn)注冊(cè)郵箱激活功能 (常見(jiàn))
今天了解了node如何實(shí)現(xiàn)郵箱激活功能,這個(gè)功能非常常見(jiàn),當(dāng)我們注冊(cè)一個(gè)賬號(hào)時(shí),肯定會(huì)有這步,下面看下如何實(shí)現(xiàn)這個(gè)功能2017-07-07
使用Jasmine和Karma對(duì)AngularJS頁(yè)面程序進(jìn)行測(cè)試
這篇文章主要介紹了使用Jasmine和Karma對(duì)AngularJS頁(yè)面程序進(jìn)行測(cè)試的方法,以Node.js為環(huán)境,非常適合JavaScript的全棧開(kāi)發(fā)時(shí)使用,需要的朋友可以參考下2016-03-03
nodejs對(duì)mongodb數(shù)據(jù)庫(kù)的增加修刪該查實(shí)例代碼
在本篇文章里小編給大家整理的是一篇關(guān)于nodejs對(duì)mongodb數(shù)據(jù)庫(kù)的增加修刪該查實(shí)例代碼,有需要的朋友們可以參考下。2020-01-01
Node.js之構(gòu)建WebSocket服務(wù)全過(guò)程
這篇文章主要介紹了Node.js之構(gòu)建WebSocket服務(wù)全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09

