亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js(十四)——Net模塊之Buffer

發布時間:2020-06-23 19:40:58 來源:網絡 閱讀:1275 作者:mazongfei 欄目:web開發

網絡的基礎是數據的傳輸和處理,Buffer緩沖,在NodeJs中處理二進制的數據,為什么要折騰出一個Buffer呢,因為JavaScript字符串是一個utf-8編碼存儲的,處理二進制的能力是很弱的,而網絡層對于不同資源的請求、響應甚至是文件都是用二進制進行交互的,所以NodeJs就有了這么一個接口,專門存放二進制的緩存區,并提供了一些方法來對這些緩存區的數據進行進一步的處理,

Buffer在NodeJs中是可以全局訪問的,同樣用require來引用和加載它;


在Buffer對象與字符串直接相互轉化的時候是需要指定編碼格式的,如果不指定;默認是按照utf-8的格式進行轉換的

新版:

Node.js(十四)——Net模塊之Buffer

之前版本的寫法是:

Node.js(十四)——Net模塊之Buffer

第二種:傳遞一個size參數 來表示緩存區的大小

Node.js(十四)——Net模塊之Buffer

這種實例化的方法只是分配了一段內存區間,往里面寫入的內容如果超出長度,那么超出長度的部分是不會被緩沖的

例如:

Node.js(十四)——Net模塊之Buffer

第三種初始化方法:通過數組

當然也可以通過下標來取得數組中的值,如果數組的值為小數型,這個時候取下標的時候會做取整操作。

Node.js(十四)——Net模塊之Buffer


作為一種存儲原始數據的方法,Buffer不僅能處理jsp連接中發送和接收的數據,

也能處理圖像或者是壓縮文件,讀取到二進制數據甚至是文件系統中的讀寫的數據,

包括網絡中的二進制數據流,只是是NodeJs中能處理的IO操作中移動的數據都能用到Buffer

Buffer應該怎么用?

Buffer是一個構造函數,同時也是一個對象 它里面的屬性有:

poolSize:內存載體的容量

靜態方法

isBuffer:判斷對象是否是buffer類型的對象

compare:用來判斷兩個buffer對象的相對位置,一般用來做字符串的排序

isEncoding:判斷NodeJs是否支持某種編碼,像中文處理只能使用utf-8這種編碼,對于gbk是無法解析的,需要使用第三方庫

concat:用于將幾個buffer對象連接創建為一個新的buffer對象,我們可以手工分配合并的buffer對象的空間大小,如果空間不夠數據會被截斷

bytelength:用來獲得指定編碼下字符串所占的字節數,由于字符串編碼的不同字符串長度和字節長度也是不一樣的


實例化之后所具有的能力:

buf.write()

buf.toString()

buf.copy()

更多參考API文檔

buffer | Node.js API 文檔  http://nodejs.cn/api/buffer.html


編碼所使用的場景?

本地需要讀取一個圖片,然后再復制一張圖片出來,同時再拿到這個圖片的

base64編碼

已百度圖標為例:

/**
 * New node file
 */
 //先拿到fs模塊
var fs = require('fs')
//讀出logo數據,同時創建到一個Buffer對象中
fs.readFile('logo.png', function(err,origin_buffer){
	//如果讀取的過程中指定了編碼的話,就不是buffer對象了,而是你指定編碼的那個字符串
	//首先判斷是不是buffer
	console.log(Buffer.isBuffer(origin_buffer))
	//寫一個新文件
	fs.writeFile('logo_buffer.png', origin_buffer,function(err){
		if(err) console.log(err);
	})
	
	//writeFile如果沒有指定編碼的話,會認為是一個utf8編碼的字符串
	//基于原始的buffer再創建一個新的buffer對象,通過base64來解碼
	//這樣走了彎路
	//var base64Image = new Buffer(origin_buffer).toString('base64');
	var base64Image = origin_buffer.toString('base64')
	//打印base64的值
	console.log(base64Image);
	//把base64Image穿入參數
	var decodedImage = new Buffer(base64Image, 'base64');
	//判斷兩個buffer是不是一樣的
	console.log(Buffer.compare(origin_buffer,decodedImage));
	fs.writeFile('logo_decoded.png',decodedImage,function(err){
		if(err) console.log(err);
	})
	
})

運行結果如圖所示:

Node.js(十四)——Net模塊之Buffer

true說明我們通過readFile拿到的的確是個buffer對象,

0:說明兩個origin_buffer和decodedImage都是一樣的。


那這個base64編碼我們應該怎么應用呢?

首先先把base64轉碼,通過

data::p_w_picpath/png;base64,

后面跟上base64編碼字符串

  1. 先把src的路徑給清空

  2. 再把重新編碼后的字符串粘貼過去

就可以正常顯示圖片了,如圖所示:

Node.js(十四)——Net模塊之Buffer

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴安盟| 泰兴市| 晋城| 黑龙江省| 清水河县| 汉寿县| 山阴县| 霍山县| 抚宁县| 邵阳县| 翁牛特旗| 临朐县| 奉新县| 海晏县| 内丘县| 沾化县| 益阳市| 叶城县| 哈巴河县| 瓮安县| 贵定县| 南开区| 柳林县| 阜平县| 马公市| 横峰县| 修水县| 泾川县| 班戈县| 息烽县| 沂水县| 乌鲁木齐市| 右玉县| 平利县| 新乡县| 鄂托克旗| 苍山县| 彩票| 山阳县| 上高县| 电白县|