国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

詳解nodeJS之二進(jìn)制buffer對(duì)象

2024-05-06 15:16:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前面的話

在ES6引入TypedArray之前,JavaScript語(yǔ)言沒(méi)有讀取或操作二進(jìn)制數(shù)據(jù)流的機(jī)制。Buffer類被引入作為Nodejs的API的一部分,使其可以在TCP流和文件系統(tǒng)操作等場(chǎng)景中處理二進(jìn)制數(shù)據(jù)流。現(xiàn)在TypedArray已經(jīng)被添加進(jìn)ES6中,Buffer類以一種更優(yōu)與更適合Node.js用例的方式實(shí)現(xiàn)了Uint8Array。本文將詳細(xì)介紹buffer對(duì)象

 概述

由于應(yīng)用場(chǎng)景不同,在Node中,應(yīng)用需要處理網(wǎng)絡(luò)協(xié)議、操作數(shù)據(jù)庫(kù)、處理圖片、接收上傳文件等,在網(wǎng)絡(luò)流和文件的操作中,還要處理大量二進(jìn)制數(shù)據(jù),JavaScript自有的字符串遠(yuǎn)遠(yuǎn)不能滿足這些需求,于是Buffer對(duì)象應(yīng)運(yùn)而生

Buffer是一個(gè)典型的JavaScript與C++結(jié)合的模塊,它將性能相關(guān)部分用C++實(shí)現(xiàn),將非性能相關(guān)的部分用JavaScript實(shí)現(xiàn)。Buffer類的實(shí)例類似于整數(shù)數(shù)組,除了其是大小固定的、且在V8堆外分配物理內(nèi)存。Buffer的大小在其創(chuàng)建時(shí)就已確定,且不能調(diào)整大小

由于Buffer太過(guò)常見(jiàn),Node在進(jìn)程啟動(dòng)時(shí)就已經(jīng)加載了它,并將其放在全局對(duì)象(global)上。所以在使用Buffer時(shí),無(wú)須通過(guò)require()即可直接使用

/*{ [Function: Buffer] poolSize: 8192, from: [Function], alloc: [Function], allocUnsafe: [Function], allocUnsafeSlow: [Function], isBuffer: [Function: isBuffer], compare: [Function: compare], isEncoding: [Function], concat: [Function], byteLength: [Function: byteLength] } */console.log(Buffer);

創(chuàng)建

在 Node.js v6之前的版本中,Buffer實(shí)例是通過(guò)Buffer構(gòu)造函數(shù)創(chuàng)建的,它根據(jù)提供的參數(shù)返回不同的 Buffer,而新版本的nodejs則提供了對(duì)應(yīng)的方法

1、new Buffer(size)。傳一個(gè)數(shù)值作為第一個(gè)參數(shù)給Buffer()(如new Buffer(10)),則分配一個(gè)指定大小的新建的Buffer對(duì)象

分配給這種Buffer實(shí)例的內(nèi)存是未初始化的(沒(méi)有用0填充)。雖然這樣的設(shè)計(jì)使得內(nèi)存的分配非常快,但已分配的內(nèi)存段可能包含潛在的敏感舊數(shù)據(jù)

這種Buffer實(shí)例必須手動(dòng)地被初始化,可以使用buf.fill(0)或?qū)憹M這個(gè)Buffer。雖然這種行為是為了提高性能而有意為之的,但開(kāi)發(fā)經(jīng)驗(yàn)表明,創(chuàng)建一個(gè)快速但未初始化的Buffer與創(chuàng)建一個(gè)慢點(diǎn)但更安全的Buffer之間需要有更明確的區(qū)分

var buf = new Buffer(5);console.log(buf);//<Buffer e0 f7 1d 01 00>buf.fill(0);console.log(buf);//<Buffer 00 00 00 00 00>

[注意]當(dāng)我們?yōu)橐粋€(gè)Buffer對(duì)象分配空間大小后,其長(zhǎng)度就是固定的,不能更改

var buf = new Buffer(5);console.log(buf);//<Buffer b8 36 70 01 02>buf[0] = 1;console.log(buf);//<Buffer 01 36 70 01 02>buf[10] = 1;console.log(buf);//<Buffer 01 79 43 6f 6e>

【Buffer.allocUnsafe(size)】

在新版本中,由Buffer.allocUnsafe(size)方法替代,來(lái)分配一個(gè)大小為 size 字節(jié)的新建的沒(méi)有用0填充的Buffer。可以使用buf.fill(0)初始化Buffer實(shí)例為0

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 响水县| 东阿县| 阳泉市| 白玉县| 信宜市| 阿合奇县| 东山县| 贵溪市| 汝阳县| 桃源县| 南投县| 太白县| 中山市| 竹山县| 新余市| 容城县| 加查县| 修武县| 芜湖市| 龙井市| 莫力| 宝丰县| 蒙自县| 家居| 禹州市| 正安县| 天台县| 吉林省| 潞西市| 贞丰县| 天柱县| 汉中市| 平陆县| 福鼎市| 德州市| 神农架林区| 达州市| 当雄县| 安岳县| 晋江市| 澎湖县|