一文搞懂 Blob、Stream 和 Buffer
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在Javascript中, BlobBlob 對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類(lèi)文件對(duì)象。它可以存儲(chǔ)任何類(lèi)型的數(shù)據(jù),包括圖片、音頻和視頻等多媒體資源。它的數(shù)據(jù)可以按文本或二進(jìn)制的格式進(jìn)行讀取,也可以轉(zhuǎn)換成 創(chuàng)建Blob對(duì)象創(chuàng)建Blob對(duì)象可以使用以下兩種方法:
const myBlob = new Blob(["hello", "juejin"], { type: "text/plain" }); 生成一個(gè)包含
const file = document.getElementById('input').files[0]; const url = URL.createObjectURL(file); const blob = new Blob([file], {type: 'image/png'}); 上述代碼中通過(guò) input 元素上傳了一個(gè)圖片,生成了一個(gè) blob 對(duì)象。 Blob對(duì)象讀取Blob 對(duì)象中的數(shù)據(jù)可以通過(guò)以下兩種方式讀?。?/p>
const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload = function () { var arrayBuffer = reader.result; console.log(arrayBuffer); }
let xhr = new XMLHttpRequest(); xhr.open('GET', someUrl); xhr.responseType = 'blob'; xhr.onload = function () { let blob = xhr.response; const blob = new Blob(['\ufeff', blob], { type: 'text/csv,charset=utf-8' }); const url = window.URL.createObjectURL(blob); }; xhr.send(); Blob的應(yīng)用場(chǎng)景Blob 對(duì)象可以用于 web 端和服務(wù)器端的文件上傳、音視頻播放、數(shù)據(jù)處理等領(lǐng)域。在前端中,我們可以將 Blob 對(duì)象作為表單數(shù)據(jù)提交到服務(wù)器,也可以通過(guò) Blob 對(duì)象構(gòu)建音視頻播放器,實(shí)現(xiàn)在線播放音視頻。(文檔) StreamStream 是 Javascript 中數(shù)據(jù)流處理模塊的一種實(shí)現(xiàn)方式。它可以解決內(nèi)存受限、網(wǎng)絡(luò)帶寬有限等問(wèn)題。
Node.js 中的流類(lèi)型:
創(chuàng)建Stream對(duì)象在 Node.js 環(huán)境下,可以通過(guò)fs模塊的 const fs = require('fs'); const readStream = fs.createReadStream('a.txt'); const writeStream = fs.createWriteStream('b.txt'); readStream.pipe(writeStream); Stream的事件監(jiān)聽(tīng)Stream 對(duì)象也是一個(gè)事件觸發(fā)器,通過(guò)監(jiān)聽(tīng) Stream 對(duì)象的事件可以實(shí)現(xiàn)對(duì)數(shù)據(jù)流處理的控制: readStream.on('data', chunk => { console.log(chunk); }).on('end', () => { console.log('結(jié)束'); }); Stream的應(yīng)用場(chǎng)景Stream對(duì)象可以用于大文件的讀取、寫(xiě)入、壓縮、加密、解密等領(lǐng)域。在 Node.js 環(huán)境下,Stream 對(duì)象具有非常重要的地位,例如在 HTTP 請(qǐng)求處理、文件系統(tǒng)操作和數(shù)據(jù)庫(kù)讀取等領(lǐng)域中都會(huì)用到 Stream。 BufferJavascript 語(yǔ)言自身只有字符串?dāng)?shù)據(jù)類(lèi)型,沒(méi)有二進(jìn)制數(shù)據(jù)類(lèi)型。但在處理像 TCP 流或文件流時(shí),必須使用到二進(jìn)制數(shù)據(jù)。因此在Node.js中,定義了一個(gè) Buffer 類(lèi),該類(lèi)用來(lái)創(chuàng)建一個(gè)專(zhuān)門(mén)存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。(文檔) 創(chuàng)建Buffer對(duì)象創(chuàng)建 Buffer 對(duì)象有以下幾種方法:
const buffer = new Buffer('hello', 'utf-8');
const buffer = Buffer.alloc(10);
const buffer = Buffer.from('juejin', 'utf-8'); Buffer的讀寫(xiě)操作Buffer 對(duì)象可以進(jìn)行讀寫(xiě)操作,例如對(duì) Buffer 對(duì)象的第一個(gè)字節(jié)進(jìn)行讀取: const buffer = Buffer.from('hello', 'utf-8'); const firstByte = buffer[0]; console.log(firstByte); 對(duì) Buffer 對(duì)象的前兩個(gè)字節(jié)進(jìn)行寫(xiě)入: const buffer = Buffer.alloc(5); buffer.writeUInt16BE(0x1234, 0); console.log(buffer.toString('hex')); Buffer的應(yīng)用場(chǎng)景Buffer 對(duì)象在 Node.js 環(huán)境下被廣泛應(yīng)用于文件流的讀寫(xiě)、網(wǎng)絡(luò)流的傳輸、加密算法的實(shí)現(xiàn)等領(lǐng)域,在 Web 端也被一些第三方庫(kù)使用。由于 Buffer 對(duì)象的特殊性,所以需要注意其內(nèi)存消耗,避免造成內(nèi)存泄漏等問(wèn)題。 總結(jié)Blob、Stream 和 Buffer 是 Javascript 中常用的三種數(shù)據(jù)處理工具,它們?cè)诓煌膱?chǎng)景下發(fā)揮著重要作用,熟練掌握這些工具是非常有必要的,它可以有效提高數(shù)據(jù)處理的效率,實(shí)現(xiàn)更加復(fù)雜的數(shù)據(jù)操作,幫助我們更高效的完成工作和需求。
該文章在 2023/11/27 11:41:17 編輯過(guò) |
相關(guān)文章
正在查詢... |