bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

NodeJS中的Buffer有什么用

這篇文章主要介紹了NodeJS中的Buffer有什么用,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

為臨縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及臨縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、臨縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

什么是 Buffer

如同官方 API 中介紹的那樣,在 ES6 引入 TypedArray 之前,JavaScript 沒有讀取或者操作二進(jìn)制數(shù)據(jù)流的機(jī)制。 Buffer 類作為 NodeJS API 的一部分被引入,以便能夠和 TCP 等網(wǎng)絡(luò)流和文件流等進(jìn)行交互。

現(xiàn)在 TypedArray 已經(jīng)被添加到了 ES6 中,Buffer 類以一種更優(yōu)化和適用于 NodeJS 操作的方式實(shí)現(xiàn)了 Unit8Array API。

總而言之,Buffer 類是用來處理二進(jìn)制數(shù)據(jù),因?yàn)樘S昧耍灾苯臃旁诹巳肿兞坷铮褂玫臅r(shí)候無需 require。

Buffer 類的實(shí)例類似于整型數(shù)組,不過緩沖區(qū)的大小在創(chuàng)建時(shí)確定,不能調(diào)整。Buffer 對(duì)象不同之處在于它不經(jīng) V8 的內(nèi)存分配機(jī)制,Buffer 是一個(gè) JavaScript 和 C++ 結(jié)合的模塊,內(nèi)存由 C++ 申請(qǐng),JavaScript 分配。

關(guān)于 Buffer 內(nèi)存分配相關(guān)知識(shí)不展開討論,感興趣同學(xué)可以看看樸老濕的書。

實(shí)例化 Buffer

在 NodeJS v6 之前都是通過調(diào)用構(gòu)造函數(shù)的方式實(shí)例化 Buffer,根據(jù)參數(shù)返回不同結(jié)果。處于安全性原因,這種方式在 v6 后的版本中已經(jīng)被廢除,提供了

  • Buffer.from()
  • Buffer.alloc()
  • Buffer.allocUnsafe()

三個(gè)單獨(dú)的,職責(zé)清晰的函數(shù)處理實(shí)例化 Buffer 的工作。

  • Buffer.from(array):返回一個(gè)內(nèi)容包含所提供的字節(jié)副本的 Buffer,數(shù)組中每一項(xiàng)是一個(gè)表示八位字節(jié)的數(shù)字,所以值必須在 0 ~ 255 之間,否則會(huì)取模
  • Buffer.from(arrayBuffer):返回一個(gè)與給定的 ArrayBuffer 共享內(nèi)存的新 Buffer
  • Buffer.from(buffer):返回給定 Buffer 的一個(gè)副本 Buffer
  • Buffer.from(string [, encoding]):返回一個(gè)包含給定字符串的 Buffer
  • Buffer.alloc(size [, fill [, encoding]]):返回指定大小并且“已填充”的 Buffer
  • Buffer.allocUnsafe(size):返回指定大小的 Buffer,內(nèi)容必須用 buf.fill(0) 等方法填充
// 0x 表示 16 進(jìn)制

Buffer.from([1, 2, 3]) // [0x1, 0x2, 0x3]

Buffer.from('test', 'utf-8') // [0x74, 0x65, 0x73, 0x74]

Buffer.alloc(5, 1) // [0x1, 0x1, 0x1, 0x1, 0x1]

Buffer.allocUnsafe(5); // 值不確定,后面詳談

Buffer.allocUnsafe() 的執(zhí)行會(huì)快于 Buffer.alloc() 看名字很不安全,確實(shí)也不安全。

當(dāng)調(diào)用 Buffer.allocUnsafe() 時(shí)分配的內(nèi)存段尚未初始化(不歸零),這樣分配內(nèi)存速度很塊,但分配到的內(nèi)存片段可能包含舊數(shù)據(jù)。如果在使用的時(shí)候不覆蓋這些舊數(shù)據(jù)就可能造成內(nèi)存泄露,雖然速度快,盡量避免使用。

編碼

Buffer 支持以下幾種編碼格式

  • ascii
  • utf8
  • utf16le
  • base64
  • binary
  • hex

Buffer 和 String 轉(zhuǎn)換

字符串轉(zhuǎn)為 Buffer 比較簡(jiǎn)單

Buffer.from(string [, encoding])

同時(shí) Buffer 實(shí)例也有 toString 方法將 Buffer 轉(zhuǎn)為字符串

buf.toString([encoding[, start[, end]]])

Buffer 拼接

使用 concat 方法可以講多個(gè) Buffer 實(shí)例拼接為一個(gè) Buffer 實(shí)例

Buffer.concat(list[, totalLength])

StringDecoder

在 NodeJS 中一個(gè)漢字由三個(gè)字節(jié)表示,如果我們處理中文字符的時(shí)候使用了不是3的倍數(shù)的字節(jié)數(shù)就會(huì)造成字符拼接亂碼問題。

const buf = Buffer.from('中文字符串!');

for(let i = 0; i < buf.length; i+=5){
  var b = Buffer.allocUnsafe(5);
  buf.copy(b, 0, i);
  console.log(b.toString());
}

這樣可以看到結(jié)果中出現(xiàn)了亂碼

NodeJS中的Buffer有什么用

但如果使用 string_decoder 模塊便可以解決這個(gè)問題

const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

const buf = Buffer.from('中文字符串!');

for(let i = 0; i < buf.length; i+=5){
  var b = Buffer.allocUnsafe(5);
  buf.copy(b, 0, i);
  console.log(decoder.write(b));
}

StringDecoder 在得到編碼后,知道寬字節(jié)在utf-8下占3個(gè)字節(jié),所以在處理末尾不全的字節(jié)時(shí),會(huì)保留到第二次 write()。目前只能處理UTF-8、Base64 和 UCS-2/UTF-16LE。

Buffer 其它常用 API

還有一些 Buffer 常用的 API

  • Buffer.isBuffer:判斷對(duì)象是否為 Buffer
  • Buffer.isEncoding:判斷 Buffer 對(duì)象編碼
  • buf.length:返回 內(nèi)存為此 Buffer 實(shí)例所申請(qǐng)的字節(jié)數(shù),并不是 Buffer 實(shí)例內(nèi)容的字節(jié)數(shù)
  • buf.indexOf:和數(shù)組的 indexOf 類似,返回某字符串、acsii 碼或者 buf 在改 buf 中的位置
  • buf.copy:將一個(gè) buf 的(部分)內(nèi)容復(fù)制到另外一個(gè) buf 中

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享NodeJS中的Buffer有什么用內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

當(dāng)前標(biāo)題:NodeJS中的Buffer有什么用
文章起源:http://vcdvsql.cn/article22/iigicc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站定制網(wǎng)站手機(jī)網(wǎng)站建設(shè)做網(wǎng)站云服務(wù)器響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化