網(wǎng)站首頁 前端文檔 正文
二進制流是大量的二進制數(shù)據(jù)的集合。由于通常情況下二進制流的大小挺大的,因此二進制流一般不會一起運送,而會在運輸前切分成小塊然后逐一發(fā)送。
當(dāng)數(shù)據(jù)處理單元暫時不再接收其他數(shù)據(jù)流時,剩余的數(shù)據(jù)將會被保留在緩存中,直到數(shù)據(jù)處理單元準(zhǔn)備好接收更多數(shù)據(jù)為止。
Node.js 服務(wù)器一般需要在文件系統(tǒng)中進行讀寫,而文件在存儲層面而言其實都是二進制流。除此之外,Node.js 還能與 TCP 流一起使用,讓 TCP 流在不可靠的互聯(lián)網(wǎng)絡(luò)上提供可靠的端到端字節(jié)流保障通信。
發(fā)送給接收者的數(shù)據(jù)流會被緩沖,直到接收者準(zhǔn)備接收更多要處理的數(shù)據(jù)為止。這就是 Node.js 處理臨時數(shù)據(jù)部分的工作內(nèi)容 —— 在 V8 引擎外部管理和存儲二進制數(shù)據(jù)。
讓我們一起深入緩沖區(qū)(Buffer)的各種使用方法,了解更多有關(guān)它們的信息以及一起學(xué)習(xí)如何在 Node.js 程序中使用它們吧。
Node.js Buffer 的方法
Node.js 緩沖模塊的最大優(yōu)勢,其實就是它是內(nèi)置于 Node.js 中的,因此我們可以在任何我們想要使用它的地方使用它。
讓我們一起瀏覽一些重要的 Node.js 緩沖模塊的方法吧。
Buffer.alloc()
此方法將創(chuàng)建一個新的緩沖區(qū),但是分配的大小不是固定的。當(dāng)我們調(diào)用此方法時,可以自行分配大小(以字節(jié)為單位)。
const buf = Buffer.alloc(6) // 這會創(chuàng)建一個 6 字節(jié)的緩沖區(qū) console.log(buf) // <Buffer 00 00 00 00 00 00>
Buffer.byteLength()
如果我們想要獲取緩沖區(qū)的長度,我們只需調(diào)用 Buffer.byteLength() 就行了。
var buf = Buffer.alloc(10) var buffLen = Buffer.byteLength(buf) // 檢查緩沖區(qū)長度 console.log(buffLen) // 10
Buffer.compare()
通過使用 Buffer.compare() 我們可以比較兩個緩沖區(qū),此方法的返回值是 -1,0,1 中的一個。
譯者注:buf.compare(otherBuffer); 這一句調(diào)用會返回一個數(shù)字 -1,0,1,分別對應(yīng) buf 在 otherBuffer 之前,之后或相同。
var buf1 = Buffer.from('Harsh') var buf2 = Buffer.from('Harsg') var a = Buffer.compare(buf1, buf2) console.log(a) // 這會打印 0 var buf1 = Buffer.from('a') var buf2 = Buffer.from('b') var a = Buffer.compare(buf1, buf2) console.log(a) // 這會打印 -1 var buf1 = Buffer.from('b') var buf2 = Buffer.from('a') var a = Buffer.compare(buf1, buf2) console.log(a) // 這會打印 1
Buffer.concat()
顧名思義,我們可以使用此函數(shù)連接兩個緩沖區(qū)。當(dāng)然,就像字符串一樣,我們也可以連接兩個以上的緩沖區(qū)。
var buffer1 = Buffer.from('x') var buffer2 = Buffer.from('y') var buffer3 = Buffer.from('z') var arr = [buffer1, buffer2, buffer3] console.log(arr) /* buffer, !concat [ <Buffer 78>, <Buffer 79>, <Buffer 7a> ] */ // 通過 Buffer.concat 方法連接兩個緩沖區(qū) var buf = Buffer.concat(arr) console.log(buf) // <Buffer 78 79 7a> concat successful
Buffer.entries()
Buffer.entries() 會用這一緩沖區(qū)的內(nèi)容創(chuàng)建并返回一個 [index, byte] 形式的迭代器。
var buf = Buffer.from('xyz') for (a of buf.entries()) { console.log(a) /* 這個會在控制臺輸出一個有緩沖區(qū)位置與內(nèi)容的字節(jié)的數(shù)組 [ 0, 120 ][ 1, 121 ][ 2, 122 ] */ }
Buffer.fill()
我們可以使用 Buffer.fill() 這個函數(shù)將數(shù)據(jù)插入或填充到緩沖區(qū)中。更多信息請參見下文。
const b = Buffer.alloc(10).fill('a') console.log(b.toString()) // aaaaaaaaaa
Buffer.includes()
像字符串一樣,它將確認緩沖區(qū)是否具有該值。我們可以使用 Buffer.includes() 方法來實現(xiàn)這一點,給定方法根據(jù)搜索返回一個布爾值,即 true 或 false。
const buf = Buffer.from('this is a buffer') console.log(buf.includes('this')) // true console.log(buf.includes(Buffer.from('a buffer example'))) // false
Buffer.isEncoding()
我們可能知道二進制文件必須進行編碼,那么如果我們要檢查數(shù)據(jù)類型是否支持字符編碼該怎么辦呢?我們可以使用 Buffer.isEncoding() 方法進行確認。如果支持,它將返回 true。
console.log(Buffer.isEncoding('hex')) // true console.log(Buffer.isEncoding('utf-8')) // true console.log(Buffer.isEncoding('utf/8')) // false console.log(Buffer.isEncoding('hey')) // false
Buffer.slice()
buf.slice() 將用于使用緩沖區(qū)的選定元素創(chuàng)建一個新緩沖區(qū) —— 對緩沖區(qū)進行切割時,將創(chuàng)建一個新緩沖區(qū),其中包含要在新緩沖區(qū)切片中找到的項目的列表。
var a = Buffer.from('uvwxyz'); var b = a.slice(2, 5); console.log(b.toString()); // wxy
Buffer.swapX()
Buffer.swapX() 用于交換緩沖區(qū)的字節(jié)順序。使用 Buffer.swapX() (此處 X 可以為 16, 32, 64)來交換 16 位,32 位和 64 位緩沖區(qū)對象的字節(jié)順序。
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]) console.log(buf1) // <Buffer 01 02 03 04 05 06 07 08> // 交換 16 位字節(jié)順序 buf1.swap16() console.log(buf1) // <Buffer 02 01 04 03 06 05 08 07> // 交換 32 位字節(jié)順序 buf1.swap32() console.log(buf1) // <Buffer 03 04 01 02 07 08 05 06> // 交換 64 位字節(jié)順序 buf1.swap64() console.log(buf1) // <Buffer 06 05 08 07 02 01 04 03>
Buffer.json()
它可以幫助我們從緩沖區(qū)創(chuàng)建 JSON 對象,而該方法將返回 JSON 緩沖區(qū)對象,
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); console.log(buf.toJSON()); // {"type":"Buffer", data:[1, 2, 3, 4, 5, 6, 7, 8]}
結(jié)論
如果我們需要進一步了解并使用 Node.js 的緩沖區(qū),我們需要對緩沖區(qū)以及 Node.js 緩沖區(qū)的工作原理有更扎實的基礎(chǔ)知識。我們還應(yīng)該了解為什么我們需要使用 Node.js 緩沖區(qū)和各種 Node.js 緩沖區(qū)方法的使用。
原文鏈接:https://www.php.cn/js-tutorial-487074.html
相關(guān)推薦
- 2022-06-26 python數(shù)據(jù)處理之Pandas類型轉(zhuǎn)換的實現(xiàn)_python
- 2021-11-03 C++趣味算法之偵探推理_C 語言
- 2022-08-28 SpringCloudAlibaba-3.分布式事務(wù)(Seata)
- 2022-09-16 c#解析jobject的數(shù)據(jù)結(jié)構(gòu)_C#教程
- 2022-04-18 python?commands模塊的適用方式_python
- 2022-09-15 docker倉庫登錄及配置insecure-registries的方法_docker
- 2022-04-16 pycharm實現(xiàn)設(shè)置自動的參數(shù)注釋標(biāo)識_python
- 2022-07-06 python?pandas中的agg函數(shù)用法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支