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

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

node.JS二進(jìn)制操作模塊buffer對(duì)象使用方法詳解

2024-05-06 15:44:10
字體:
來(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ù)流?,F(xiàn)在TypedArray已經(jīng)被添加進(jìn)ES6中,Buffer類以一種更優(yōu)與更適合Node.js用例的方式實(shí)現(xiàn)了Uint8Array。

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)建Buffer對(duì)象

在 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??梢允褂胋uf.fill(0)初始化Buffer實(shí)例為0

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

圖片精選

主站蜘蛛池模板: 宜川县| 鹰潭市| 宝山区| 孝感市| 万全县| 荔波县| 台中县| 吉林市| 左贡县| 泸溪县| 纳雍县| 郴州市| 铁岭市| 马尔康县| 江西省| 襄垣县| 青川县| 兴和县| 修武县| 阿鲁科尔沁旗| 凤冈县| 陵水| 迁安市| 青浦区| 神池县| 广丰县| 邵阳市| 年辖:市辖区| 常山县| 葫芦岛市| 武冈市| 康保县| 凤庆县| 合江县| 正定县| 仪征市| 广平县| 罗山县| 广州市| 潮安县| 武宣县|