Day5 Node.js Buffer(緩沖區(qū))

<h1>Node.js Buffer(緩沖區(qū))</h1>

JavaScript 語言自身只有字符串數(shù)據(jù)類型重抖,沒有二進制數(shù)據(jù)類型。

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

在 Node.js 中悠鞍,Buffer 類是隨 Node 內(nèi)核一起發(fā)布的核心庫对室。Buffer 庫為 Node.js 帶來了一種存儲原始數(shù)據(jù)的方法掩宜,可以讓 Node.js 處理二進制數(shù)據(jù)心肪,每當需要在 Node.js 中處理I/O操作中移動的數(shù)據(jù)時锭亏,就有可能使用 Buffer 庫硬鞍。原始數(shù)據(jù)存儲在 Buffer 類的實例中。一個 Buffer 類似于一個整數(shù)數(shù)組锅减,但它對應(yīng)于 V8 堆內(nèi)存之外的一塊原始內(nèi)存伐坏。

  • <h1> 創(chuàng)建 Buffer 類
  • 方法 1

創(chuàng)建長度為 10 字節(jié)的 Buffer 實例:

var buf = new Buffer(10);
  • 方法 2

通過給定的數(shù)組創(chuàng)建 Buffer 實例:

var buf = new Buffer([10, 20, 30, 40, 50]);
  • 方法 3

通過一個字符串來創(chuàng)建 Buffer 實例:

var buf = new Buffer("www.runoob.com", "utf-8");

utf-8 是默認的編碼方式,此外它同樣支持以下編碼:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"每瞒。

  • <h1>寫入緩沖區(qū)
buf = new Buffer(256);
len = buf.write("www.runoob.com");

console.log("寫入字節(jié)數(shù) : "+  len);

運行結(jié)果:

$node main.js
寫入字節(jié)數(shù) : 14
  • <h1>從緩沖區(qū)讀取數(shù)據(jù)
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

運行結(jié)果:

$ node main.js
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
  • <h1>將 Buffer 轉(zhuǎn)換為 JSON 對象
var buf = new Buffer('www.runoob.com');
var json = buf.toJSON(buf);

console.log(json);

運行結(jié)果:

[ 119, 119, 119, 46, 114, 117, 110, 111, 111, 98, 46, 99, 111, 109 ]
  • <h1>緩沖區(qū)合并
var buffer1 = new Buffer('菜鳥教程 ');
var buffer2 = new Buffer('www.runoob.com');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 內(nèi)容: " + buffer3.toString());

運行結(jié)果:

buffer3 內(nèi)容: 菜鳥教程 www.runoob.com
  • <h1>緩沖區(qū)比較
var buffer1 = new Buffer('ABC');
var buffer2 = new Buffer('ABCD');
var result = buffer1.compare(buffer2);
if(result < 0) {
   console.log(buffer1 + " 在 " + buffer2 + "之前");
}else if(result == 0){
   console.log(buffer1 + " 與 " + buffer2 + "相同");
}else {
   console.log(buffer1 + " 在 " + buffer2 + "之后");
}

運行結(jié)果:

ABC在ABCD之前
  • <h1>拷貝緩沖區(qū)</h1>


var buffer1 = new Buffer('ABC');
// 拷貝一個緩沖區(qū)
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

運行結(jié)果:

buffer2 content: ABC
  • <h1>緩沖區(qū)裁剪
var buffer1 = new Buffer('runoob');
// 剪切緩沖區(qū)
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());

運行結(jié)果:

buffer2 content: ru
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末代芜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挤庇,更是在濱河造成了極大的恐慌贷掖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昆咽,死亡現(xiàn)場離奇詭異屠升,居然都是意外死亡潮改,警方通過查閱死者的電腦和手機腹暖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門脏答,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人殖告,你說我怎么就攤上這事』萍ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵筑煮,是天一觀的道長粤蝎。 經(jīng)常有香客問我,道長秸应,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任软啼,我火速辦了婚禮,結(jié)果婚禮上霉囚,老公的妹妹穿的比我還像新娘匕积。我一直安慰自己榜跌,他們只是感情好闪唆,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布悄蕾。 她就那樣靜靜地躺著础浮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豆同。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天芹务,我揣著相機與錄音鸭廷,去河邊找鬼。 笑死辆床,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的讼载。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼淤刃,長吁一口氣:“原來是場噩夢啊……” “哼吱型!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤灼伤,失蹤者是張志新(化名)和其女友劉穎咪鲜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颖侄,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡享郊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了展蒂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苔咪。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖团赏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情隘世,我是刑警寧澤鸠踪,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站营密,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏评汰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一主儡、第九天 我趴在偏房一處隱蔽的房頂上張望惨缆。 院中可真熱鬧丰捷,春花似錦寂汇、人聲如沸病往。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畔勤。三九已至臼膏,卻和暖如春硼被,著一層夾襖步出監(jiān)牢的瞬間渗磅,已是汗流浹背检访。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留医清,地道東北人卖氨。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像筒捺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子五嫂,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Node.js Buffer(緩沖區(qū)) JavaScript 語言自身只有字符串數(shù)據(jù)類型肯尺,沒有二進制數(shù)據(jù)類型。但在...
    FTOLsXD閱讀 520評論 0 2
  • Node.js是目前非郴蓖危火熱的技術(shù)氓仲,但是它的誕生經(jīng)歷卻很奇特水慨。 眾所周知,在Netscape設(shè)計出JavaScri...
    Myselfyan閱讀 4,076評論 2 58
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理掀亩,服務(wù)發(fā)現(xiàn)欢顷,斷路器,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,340評論 0 6
  • 微信小程序Node.js Buffer: JavaScript語言自身只有字符串數(shù)據(jù)類型炼七,沒有二進制數(shù)據(jù)類型布持。 但...
    第九程序官方閱讀 1,813評論 0 1