您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關node.js中Buffer對象有什么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Buffer對象,是Node的核心模塊,在面試中也是會頻繁被問到一個考題,如果沒有對其深入探究,可能就跟我一樣只會用,一旦面試官擴展問些問題可能就不會了。反正,當時我也只能回答說:目前涉及到的業務對Buffer模塊用的比較少,但是Buffer對象可以對于一些字符串傳輸無法滿足業務功能和性能上得到有效的優化。
Buffer對象
Buffer對象用于表示固定長度的字節序列
// 創建一個長度為 10、以零填充的 Buffer。 const buf1 = Buffer.alloc(10); // 創建一個長度為 10 的 Buffer, // 其中全部填充了值為 `1` 的字節。 const buf2 = Buffer.alloc(10, 1); var str="hello Jasen"; var buf = new Buffer.from(str,'utf-8'); console.log(buf); //輸出:<Buffer 68 65 6c 6c 6f 20 4a 61 73 65 6e>
觀察輸出的結果,Buffer對象類似一個數組。
Buffer對象中的每個元素都是16進制的兩位數(即0到255的數值)
對Buffer某個元素賦值如果小于0的,會逐次加256,直到得到一個0到255范圍的值,如果大于255則逐次減256,直到得到0-255范圍得值,如果是小數的話,則直接取整。
使用場景
可用于處理大量二進制數據
處理圖片、文件接收上傳、網絡協議等等
優勢
網絡傳輸中,性能提升
大部分網絡傳輸的時候會使用通過使用字符串,這難免需要轉換成Buffer,以二進制方式進行數據傳輸。如果我們直接預先轉換為Buffer 再進行傳輸,那么在傳輸過程中無需做額外的轉換,也避免了損耗,使性能得到提升。
以下通過ab進行一次性能測試,發起200個并發客戶端請求的結果,QPS提升的不是很高,但還是有一點點的提升,可以復制代碼執行下,是否結果和我一樣
var http = require('http'); var str = ""; for (var i = 0; i < 1024 * 10; i++) { str += "a"; } str = new Buffer.from(str,'utf-8'); http.createServer(function (req, res) { res.writeHead(200); res.end(bufstr); }).listen(8002);
Buffer與Stream
Stream 也是Node的核心模塊,數據就像流水一樣,流是對輸入輸出設備的抽象,是一組有序的、有起點和終點的字節數據傳輸手段。
Node.js 中有四種基本的流類型:
Writable - 可寫入數據的流(例如 fs.createWriteStream())
Readable - 可讀取數據的流(例如 fs.createReadStream())。
Duplex - 可讀又可寫的流(例如 net.Socket)。
Transform - 在讀寫過程中可以修改或轉換數據的 Duplex
流
場景:
文件分片上傳下載,比如下載電影時可以邊下載邊看,這樣一個實現過程。
關于“node.js中Buffer對象有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。