国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

NodeAPI學習之Buffer

Integ / 564人閱讀

摘要:與字符編碼通過指定的編碼進制,可以在與普通的字符串之間轉(zhuǎn)換。中文中文通常用于實例數(shù)組的排序。有點像方法合并截斷為的長度,缺少的部分會用補充,是一個返回,是一個支持的字符編碼返回,創(chuàng)建并返回一個形式的迭代器,如果與具有完全相同的字節(jié)就返回

Buffer

可以在TCP流或者文件系統(tǒng)操作等場景中處理二進制數(shù)據(jù)流。

Buffer實例類似于整數(shù)數(shù)組,但是Buffer大小固定、且在V8堆外分配物理內(nèi)存,Buffer的大小在創(chuàng)建時確定,無法調(diào)整。

常用Buffer類方法

注意:(以下方法Node新版本中已被廢棄,不建議使用

不建議使用的有如下:newBuffer(array)newBuffer(arrayBuffer)newBuffer(buffer)newBuffer(size)newBuffer(string)

替代方法有如下:Buffer.from()Buffer.alloc()Buffer.allocUnsafe()

Buffer.from(array)返回一個新建的包含所提供的字節(jié)數(shù)組的副本的Buffer。

let buf1 = Buffer.from([1,2,3,4]) // 
let buf2 = Buffer.from([[0x62, 0x75, 0x66, 0x66, 0x65, 0x72]]) // 
buf2.toString() // "buffer"

Buffer.from(arrayBuffer[,byteOffset[,length]])返回一個新建的與給定的ArrayBuffer共享同一內(nèi)存的Buffer。

const arr = new Unit16Array(2)

const buf = Buffer.from(arr.buffer) // 改動arr也會影響到buf

Buffer.from(buffer)返回一個新建的包含所提供的Buffer的內(nèi)容的副本的Buffer。

let buf1 = Buffer.from("buffer")
let buf2 = Buffer.from(buf1)
buf1[0] = 0x61
console.log(buf1) // auffer
console.log(buf2) // buffer

Buffer.from(string[,encoding])返回一個新建的包含所提供的字符串的副本的Buffer。

Buffer.alloc(size[,fill[,encoding]])返回一個指定大小的被填滿的Buffer實例。這個方法會明顯地比Buffer.allocUnsafe(size)慢,但可確保新創(chuàng)建的Buffer實例絕不會包含舊的和潛在的敏感數(shù)據(jù)。

// size: 新建的Buffer期望的長度
// fill:用來預(yù)填充新建的Buffer的值,默認:0
// encoding:如果fill是字符串,那么這個就是字符編碼,默認:utf-8

const buf = Buffer.alloc(5) // 
const buf = Buffer.alloc(5, "a") // 
const buf = Buffer.alloc(11, "aGVsbG8gd29ybGQ=", "base64") // 輸出:  hello world

Buffer.allocUnsafe(size)Buffer.allocUnsafeSlow(size)返回一個新建的指定size的Buffer,但它的內(nèi)容必須被初始化,可以使用buf.fill(0)或完全寫滿。

開發(fā)者應(yīng)該把所有正在使用的newBuffer()構(gòu)造函數(shù)遷移到新的API上。

是什么造成了Buffer.allocUnsafe()Buffer.allocUnsafeSlow()不安全?

是因為調(diào)用這兩個方法時,被分配的內(nèi)存都是未被初始化的(未被0填充),雖然這樣的設(shè)計使得內(nèi)存的分配非常快(性能優(yōu)勢),但是已經(jīng)分配的內(nèi)存段可能包含潛在的敏感舊數(shù)據(jù)。使用通過Buffer.allocUnsafe()創(chuàng)建的沒有被完全重寫內(nèi)存的Buffer,在Buffer內(nèi)存可讀的情況下,有可能泄露它的舊數(shù)據(jù)。

Buffer與字符編碼

通過指定的編碼進制,可以在Buffer與普通的字符串之間轉(zhuǎn)換。目前支持的asciiutf-8base-64binaryhex

const buf = Buffer.from("helloworld", "ascii")
buf.toString("hex")
buf.toString("base64")
BufferES6迭代器

同樣,Buffer實例可以使用迭代器for...of進行遍歷,遍歷器的buf.values()buf.keys()、buf.entries()可以用于創(chuàng)建迭代器。

const buf = Buffer.from([1, 2, 3])
for(let b of buf){
    console.log(b) // 1 2 3
}
類方法

Buffer.byteLength(string[, encoding])返回一個字符串的實際字節(jié)長度。String.prototype.length是返回字符串的字符數(shù)

注意字符數(shù)和字節(jié)長度是不同,英文字母中是相同的,但是當有中文時或者unicode編碼(它是用兩個字節(jié)來編碼一個字符)是不同的。

"中文hello".length // 7
Buffer.byteLength("中文hello", "uft-8") // 11

Buffer.compare(buf1, buf2)通常用于Buffer實例數(shù)組的排序。(有點像sort()方法)

Buffer.concat(list[, totalLength])合并Buffer

const buf1 = Buffer.alloc(10)
const buf2 = Buffer.alloc(14)
const buf3 = Buffer.alloc(18)
const totalLength = buf1.length + buf2.length + buf3.length // 42

const bufA = Buffer.concat([buf1, buf2, buf3], 41) // 截斷為totalLength的長度,缺少的部分會用00補充

cosnole.log(buf.length) // 41

Buffer.isBuffer(obj),是一個buffer返回true

Buffer.isEncoding(encoding),是一個支持的字符編碼返回true

Buffer.entries(),創(chuàng)建并返回一個[index, byte]形式的迭代器

cosnt buf = Buffer.from("buffer")

for(let pair of buf.entries()) {
    console.log(pair) // [0, 98],[1, 117]...
}

buf.equals(otherBuffer),如果buf與otherBuffer具有完全相同的字節(jié)就返回true

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89228.html

相關(guān)文章

  • NodeAPI習之Stream

    摘要:回調(diào)函數(shù)將接收到一個對象。要禁止這一默認行為,選項應(yīng)該指定為。一般來說,建議開發(fā)人員避免使用事件和方法,使用或事件代替。事件在寫入數(shù)據(jù)出錯或者使用管道出錯時觸發(fā),事件發(fā)生時,回調(diào)函數(shù)僅會接收到一個參數(shù)。注意事件發(fā)生時,流并不會關(guān)閉。 Stream 流可以是可讀的、可寫的、或者是可讀寫的。所有的流都是EventEmitter的實例。 對象模式 所有使用Node.js API創(chuàng)建的流對象都...

    laznrbfe 評論0 收藏0
  • node 核心模塊習之 Buffer

    摘要:核心模塊學習之何為在引入之前,沒有能讀取和操作二進制數(shù)據(jù)流的機制,作為引入,以便能和網(wǎng)絡(luò)流文件流等進行交互。返回值寫入的實際大小,沒有足夠的空間保存,只會寫入一部分。返回值實際存入的字節(jié)數(shù)。參考文章一進階核心模塊常用使用總結(jié) node 核心模塊學習之Buffer 何為 Buffer 在ES6引入 TypeArray 之前,JS沒有能讀取和操作二進制數(shù)據(jù)流的機制,Buffer 作為 No...

    soasme 評論0 收藏0
  • MongoDB習之Mongoose的使用

    摘要:文檔是的核心概念,是鍵值對的一個有序集,在里文檔被表示成對象。創(chuàng)建集合數(shù)據(jù)庫中的集合名稱當我們對其添加數(shù)據(jù)時如果已經(jīng)存在,則會保存到其目錄下,如果未存在,則會創(chuàng)建集合,然后在保存數(shù)據(jù)。使用創(chuàng)建,如下示例連接成功許巍男保存成功保存失敗參考 mongoose簡介 mongoose網(wǎng)站:https://mongoosejs.com/ 為什么要用Mongoose Mongoose就是一個讓我們...

    qieangel2013 評論0 收藏0
  • 【搶先領(lǐng)】《React 習之道》我們翻譯了一本最簡單,且最實用的 React 實戰(zhàn)教程……

    摘要:學習之道簡體中文版通往實戰(zhàn)大師之旅掌握最簡單,且最實用的教程。前言學習之道這本書使用路線圖中的精華部分用于傳授,并將其融入一個獨具吸引力的真實世界的具體代碼實現(xiàn)。完美展現(xiàn)了的優(yōu)雅。膜拜的學習之道是必讀的一本書。 《React 學習之道》The Road to learn React (簡體中文版) 通往 React 實戰(zhàn)大師之旅:掌握 React 最簡單,且最實用的教程。 showIm...

    oneasp 評論0 收藏0
  • less習之Bootstrap(按鈕篇)

    摘要:學習之按鈕篇如我上一篇學習之里面,介紹了的目錄結(jié)構(gòu),說明了在這個文件里面,定義了主題色,也包括了按鈕的主題色。偽連接,按鈕的樣式顯示為連接的樣式。接下來的安排,自己寫的文章自己也會去實現(xiàn)它,另外關(guān)于的學習也不會停止。 less學習之Bootstrap按鈕篇) 如我上一篇less學習之Bootstrap里面,介紹了Bootstrap的目錄結(jié)構(gòu),說明了在variables.less這個文件...

    sherlock221 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<