成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說對 Node 中的 Buffer 的理解?應(yīng)用場景?

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
在Node應(yīng)用中,需要處理網(wǎng)絡(luò)協(xié)議、操作數(shù)據(jù)庫、處理圖片、接收上傳文件等,在網(wǎng)絡(luò)流和文件的操作中,要處理大量二進制數(shù)據(jù),而Buffer就是在內(nèi)存中開辟一片區(qū)域(初次初始化為8KB),用來存放二進制數(shù)據(jù)。

[[404099]]

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

 一、是什么

在Node應(yīng)用中,需要處理網(wǎng)絡(luò)協(xié)議、操作數(shù)據(jù)庫、處理圖片、接收上傳文件等,在網(wǎng)絡(luò)流和文件的操作中,要處理大量二進制數(shù)據(jù),而Buffer就是在內(nèi)存中開辟一片區(qū)域(初次初始化為8KB),用來存放二進制數(shù)據(jù)

在上述操作中都會存在數(shù)據(jù)流動,每個數(shù)據(jù)流動的過程中,都會有一個最小或最大數(shù)據(jù)量

如果數(shù)據(jù)到達的速度比進程消耗的速度快,那么少數(shù)早到達的數(shù)據(jù)會處于等待區(qū)等候被處理。反之,如果數(shù)據(jù)到達的速度比進程消耗的數(shù)據(jù)慢,那么早先到達的數(shù)據(jù)需要等待一定量的數(shù)據(jù)到達之后才能被處理

這里的等待區(qū)就指的緩沖區(qū)(Buffer),它是計算機中的一個小物理單位,通常位于計算機的 RAM 中

簡單來講,Nodejs不能控制數(shù)據(jù)傳輸?shù)乃俣群偷竭_時間,只能決定何時發(fā)送數(shù)據(jù),如果還沒到發(fā)送時間,則將數(shù)據(jù)放在Buffer中,即在RAM中,直至將它們發(fā)送完畢

上面講到了Buffer是用來存儲二進制數(shù)據(jù),其的形式可以理解成一個數(shù)組,數(shù)組中的每一項,都可以保存8位二進制:00000000,也就是一個字節(jié)

例如:

  1. const buffer = Buffer.from("why"

其存儲過程如下圖所示:

二、使用方法

Buffer 類在全局作用域中,無須require導(dǎo)入

創(chuàng)建Buffer的方法有很多種,我們講講下面的兩種常見的形式:

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

Buffer.from()

  1. const b1 = Buffer.from('10'); 
  2. const b2 = Buffer.from('10''utf8'); 
  3. const b3 = Buffer.from([10]); 
  4. const b4 = Buffer.from(b3); 
  5.  
  6. console.log(b1, b2, b3, b4); // <Buffer 31 30> <Buffer 31 30> <Buffer 0a> <Buffer 0a> 

Buffer.alloc()

  1. const bAlloc1 = Buffer.alloc(10); // 創(chuàng)建一個大小為 10 個字節(jié)的緩沖區(qū) 
  2. const bAlloc2 = Buffer.alloc(10, 1); // 建一個長度為 10 的 Buffer,其中全部填充了值為 `1` 的字節(jié) 
  3. console.log(bAlloc1); // <Buffer 00 00 00 00 00 00 00 00 00 00> 
  4. console.log(bAlloc2); // <Buffer 01 01 01 01 01 01 01 01 01 01> 

在上面創(chuàng)建buffer后,則能夠toString的形式進行交互,默認情況下采取utf8字符編碼形式,如下

  1. const buffer = Buffer.from("你好"); 
  2. console.log(buffer); 
  3. // <Buffer e4 bd a0 e5 a5 bd> 
  4. const str = buffer.toString(); 
  5. console.log(str); 
  6. // 你好 

如果編碼與解碼不是相同的格式則會出現(xiàn)亂碼的情況,如下:

  1. const buffer = Buffer.from("你好","utf-8 "); 
  2. console.log(buffer); 
  3. // <Buffer e4 bd a0 e5 a5 bd> 
  4. const str = buffer.toString("ascii"); 
  5. console.log(str);  
  6. // d= e%= 

當設(shè)定的范圍導(dǎo)致字符串被截斷的時候,也會存在亂碼情況,如下:

  1. const buf = Buffer.from('Node.js 技術(shù)棧''UTF-8'); 
  2.  
  3. console.log(buf)          // <Buffer 4e 6f 64 65 2e 6a 73 20 e6 8a 80 e6 9c af e6 a0 88> 
  4. console.log(buf.length)   // 17 
  5.  
  6. console.log(buf.toString('UTF-8', 0, 9))  // Node.js � 
  7. console.log(buf.toString('UTF-8', 0, 11)) // Node.js 技 

所支持的字符集有如下:

  • ascii:僅支持 7 位 ASCII 數(shù)據(jù),如果設(shè)置去掉高位的話,這種編碼是非常快的
  • utf8:多字節(jié)編碼的 Unicode 字符,許多網(wǎng)頁和其他文檔格式都使用 UTF-8
  • utf16le:2 或 4 個字節(jié),小字節(jié)序編碼的 Unicode 字符,支持代理對(U+10000至 U+10FFFF)
  • ucs2,utf16le 的別名
  • base64:Base64 編碼
  • latin:一種把 Buffer 編碼成一字節(jié)編碼的字符串的方式
  • binary:latin1 的別名,
  • hex:將每個字節(jié)編碼為兩個十六進制字符

三、應(yīng)用場景

Buffer的應(yīng)用場景常常與流的概念聯(lián)系在一起,例如有如下:

  • I/O操作
  • 加密解密
  • zlib.js

I/O操作

通過流的形式,將一個文件的內(nèi)容讀取到另外一個文件

  1. const fs = require('fs'); 
  2.  
  3. const inputStream = fs.createReadStream('input.txt'); // 創(chuàng)建可讀流 
  4. const outputStream = fs.createWriteStream('output.txt'); // 創(chuàng)建可寫流 
  5.  
  6. inputStream.pipe(outputStream); // 管道讀寫 

加解密

在一些加解密算法中會遇到使用 Buffer,例如 crypto.createCipheriv 的第二個參數(shù) key 為 string 或 Buffer 類型

zlib.js

zlib.js 為 Node.js 的核心庫之一,其利用了緩沖區(qū)(Buffer)的功能來操作二進制數(shù)據(jù)流,提供了壓縮或解壓功能

參考文獻

http://nodejs.cn/api/buffer.html

https://segmentfault.com/a/1190000019894714

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-06-08 08:33:23

NodeStream數(shù)據(jù)

2021-05-31 10:35:34

TCPWebSocket協(xié)議

2021-07-12 08:35:24

組件應(yīng)用場景

2021-07-07 08:36:45

React應(yīng)用場景

2021-06-10 07:51:07

Node.js循環(huán)機制

2021-09-16 07:52:18

算法應(yīng)用場景

2021-06-03 08:14:01

NodeProcessJavaScript

2021-09-06 10:51:27

TypeScriptJavaScript

2021-06-30 07:19:36

React事件機制

2021-06-01 08:25:06

Node.jsJavaScript運行

2021-11-09 08:51:13

模式命令面試

2021-11-05 07:47:56

代理模式對象

2021-06-04 07:55:30

Node Fs 操作

2021-11-10 07:47:49

組合模式場景

2021-11-03 14:10:28

工廠模式場景

2021-11-04 06:58:32

策略模式面試

2021-08-16 08:33:26

git

2021-09-08 07:49:34

TypeScript 泛型場景

2021-09-28 07:12:09

測試路徑

2021-11-22 23:50:59

責(zé)任鏈模式場景
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 宅男伊人 | 国产高清一区二区 | 婷婷综合色 | 亚洲美女一区 | 亚洲欧美中文日韩在线v日本 | 亚洲精彩视频在线观看 | 免费黄色片在线观看 | 亚洲欧美另类在线观看 | 成人久久网 | 亚洲免费影院 | 亚洲成人精品国产 | 国产yw851.c免费观看网站 | 欧美日韩精品免费 | 毛片日韩 | 毛片网在线观看 | 午夜成人免费视频 | 久久久区 | 夜操| 国产亚洲一区二区三区在线观看 | 免费播放一级片 | 日本a v在线播放 | 亚洲免费精品 | 亚洲人成人网 | 欧美一区二区网站 | 国产一级一级毛片 | 久久久成人免费一区二区 | 日韩精品中文字幕在线 | 国产精品国产精品国产专区不卡 | 欧美久久国产精品 | 人人人干| 色综合久久久久 | 久久男人 | 色婷婷久久久亚洲一区二区三区 | 成人乱人乱一区二区三区软件 | www成人免费视频 | 人人看人人草 | 亚洲国产精品精华素 | 99久久精品国产一区二区三区 | 99亚洲综合 | 欧美日韩一区二区三区不卡视频 | 成人在线精品 |