真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

node.js中Buffer緩沖器的原理是什么

本篇文章給大家分享的是有關node.js中Buffer緩沖器的原理是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于成都網站制作、網站建設、外貿網站建設、吳忠網絡推廣、微信平臺小程序開發(fā)、吳忠網絡營銷、吳忠企業(yè)策劃、吳忠品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供吳忠建站搭建服務,24小時服務熱線:028-86922220,官方網址:www.cdcxhl.com

一、什么是Buffer

Buffer緩沖器是用來存儲輸入和輸出數(shù)據(jù)的一段內存。js語言沒有二進制數(shù)據(jù)類型,在處理TCP和文件流的時候,就不是很方便了。

所以node.js提供了Buffer類來處理二進制數(shù)據(jù),Buffer類是一個全局變量,Buffer在創(chuàng)建的時候大小就固定了,無法改變。

Buffer類的實例類似于由字節(jié)元素組成的數(shù)組,可以有效的表示二進制數(shù)據(jù)。

二、什么是字節(jié)

字節(jié)是計算機存儲時的一種計量單位,一個字節(jié)等于8個位。一個位就代表0或1,每8個位(bit)組成一個字節(jié)(byte)。

字節(jié)是網絡傳輸數(shù)據(jù)的基本單位,一個字節(jié)最大表示的十進制數(shù)是255。

三、什么是進制

進制是人為定義的帶進位的計數(shù)方法,常見的有二進制,八進制,十六進制,和十進制。

將任意數(shù)字轉換成不同進制

console.log(parseInt('12', 2));
console.log(parseInt('12', 8));
console.log(parseInt('12', 16));
console.log(parseInt('12', 10));

轉換進制的另一種方法:

console.log((10).toString(2));
console.log((10).toString(8));
console.log((10).toString(16));
console.log((10).toString(10));

四、創(chuàng)建Buffer的方法

通過Buffer.alloc來創(chuàng)建指定長度Buffer

//創(chuàng)建6個字節(jié)的Buffer,用0填充數(shù)據(jù)
let buf1 = Buffer.alloc(6);
console.log(buf1);
//指定數(shù)字進行填充
let buf2 = Buffer.alloc(6, 2);
console.log(buf2);
//也可以指定字符進行填充,第三個參數(shù)表示字符編碼,默認為utf8
let buf3 = Buffer.alloc(6, 'a', 'utf8');
console.log(buf3);

通過Buffer.allocUnsafe創(chuàng)建未初始化的Buffer,Buffer中的數(shù)據(jù)是未知的。

let buf = Buffer.allocUnsafe(6);
console.log(buf);

通過字節(jié)數(shù)組創(chuàng)建一個Buffer

let buf = Buffer.from([1, 2, 3, 4, 5]);
console.log(buf);

通過字符串創(chuàng)建一個Buffer,第二個參數(shù)表示字符編碼,一個中文用3個字節(jié)表示。

let buf = Buffer.from('世界你好', 'utf8');
console.log(buf);

五、Buffer的一些常用方法

通過 fill() 以指定的數(shù)據(jù)填充Buffer

let buf = Buffer.alloc(12);
console.log(buf);
//參數(shù)一表示用來填充的值
//參數(shù)二表示開始的偏移量
//參數(shù)三表示結束的偏移量
//參數(shù)四表示字符編碼
//偏移量的計算是左閉右開的區(qū)間,[start, end)
buf.fill(1, 0, 2);
console.log(buf);
buf.fill(2, 2, 4);
console.log(buf);
buf.fill('A', 4, 6);
console.log(buf);

通過 write() 向Buffer中寫入數(shù)據(jù)

let buf = Buffer.alloc(12);
console.log(buf);
//參數(shù)一表示要寫入的字符串
//參數(shù)二表示寫入的偏移量
//參數(shù)三表示寫入的字節(jié)數(shù)
//參數(shù)四表示字符編碼
buf.write('世界', 0, 3);
console.log(buf);
console.log(buf.toString());
buf.write('世界', 3, 6);
console.log(buf);
console.log(buf.toString());

通過 writeInt8() 寫入一個8位的整數(shù),注意該整數(shù)是帶符號的。

let buf = Buffer.alloc(12);
console.log(buf);
buf.writeInt8(1, 0);
buf.writeInt8(2, 1);
buf.writeInt8(3, 2);
//注意,8位的整數(shù),如果帶符號,區(qū)間在 -128 到 127 之間
buf.writeInt8(127, 3);
console.log(buf);

方法中還有一些writeInt16BE(),writeInt32BE(),writeInt16LE(),writeInt32LE()的方法。

因為不同的CPU架構,有不同的字節(jié)序,字節(jié)序是指數(shù)字在內存中保存的順序。

以 BE 結尾的,表示 Big Endian ,將高位存儲在起始位置。

以 LE 結尾的,表示 Little Endian,將低位存儲在起始位置。

let buf = Buffer.alloc(6);
//將高位存儲在起始位置
buf.writeInt16BE('256', 0); // [01 00 00 00 00 00]
console.log(buf);
//讀取要與寫入的方法一致,不然數(shù)據(jù)會錯亂。
console.log(buf.readInt16BE(0));
let buf2 = Buffer.alloc(6);
//將低位存儲在起始位置
buf2.writeInt16LE('256', 0); // [00 01 00 00 00 00]
console.log(buf2);
//讀取要與寫入的方法一致,不然數(shù)據(jù)會錯亂。
console.log(buf.readInt16LE(0));

通過 toString() 方法,將Buffer解碼成字符串。

let buf = Buffer.alloc(12);
buf.write('世', 0, 3);
buf.write('界', 3, 3);
buf.write('你', 6, 3);
buf.write('好', 9, 3);
console.log(buf);
console.log(buf.toString());

通過 slice() 創(chuàng)建一個新的Buffer切片,但是內存的指向與原Buffer仍然是同一塊內存。

let buf = Buffer.alloc(12, 6);
console.log(buf);
//參數(shù)一表示開始切片偏移量
//參數(shù)二表示結束切片偏移量
let buf2 = buf.slice(0, 3);
buf2.fill(9);
console.log(buf);

通過 copy() 拷貝一個Buffer的數(shù)據(jù)到另一個Buffer

let t_buf = Buffer.alloc(12);
let s_buf = Buffer.alloc(6);
s_buf.write('世界', 0);
console.log(s_buf.toString());
//參數(shù)一表示,拷貝進的Buffer
//參數(shù)二表示,拷貝進Buffer的開始偏移量
//參數(shù)三表示,源Buffer的開始拷貝偏移量
//參數(shù)四表示,源Buffer的結束拷貝偏移量
s_buf.copy(t_buf, 0, 0, 6);
console.log(t_buf.toString());

通過 Buffer.concat() 可以合并多個Buffer,返回一個新Buffer

let buf1 = Buffer.alloc(6);
buf1.write('hello,');
let buf2 = Buffer.alloc(6);
buf2.write('世界');
let buf3 = Buffer.concat([buf1, buf2]);
console.log(buf3.toString());
//如果合并后的Buffer字節(jié)數(shù)大于設置的值,則會截斷
let buf4 = Buffer.concat([buf1, buf2], 9);
console.log(buf4.toString());

判斷是否為一個Buffer

console.log(Buffer.isBuffer({'name': 'test'}));
console.log(Buffer.isBuffer(Buffer.from('test')));

通過 Buffer.byteLength() 獲取字符串字節(jié)長度

console.log(Buffer.byteLength('你好,世界'));

以上就是node.js中Buffer緩沖器的原理是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文題目:node.js中Buffer緩沖器的原理是什么
網址分享:http://weahome.cn/article/gggegi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部