node.js中緩衝區–Buffer
Node.js中Buffer簡介:
JavaScript 語言自身只有字串資料型別,沒有二進位制資料型別。
但在處理像TCP流或檔案流時,必須使用到二進位制資料。因此在 Node.js中,定義了一個 Buffer 類,該類用來建立一個專門存放二進位制資料的快取區。
在 Node.js 中,Buffer 類是隨 Node 核心一起釋出的核心庫。Buffer 庫為 Node.js 帶來了一種儲存原始資料的方法,可以讓 Node.js 處理二進位制資料,每當需要在 Node.js 中處理I/O操作中移動的資料時,就有可能使用 Buffer 庫。原始資料儲存在 Buffer 類的例項中。一個 Buffer 類似於一個整數陣列,但它對應於 V8 堆記憶體之外的一塊原始記憶體。
Buffer常用API
/*1.Node.js中Buffer是一個典型的javascript與c++結合的模組,它將效能相關的部分用 c++實現,將非效能的部分用javascript實現。
2.純javascript對字元友好但是i無法很好的處理二進位制資料,在java與node中buffer中存 儲的是二進位制資料。當我們面對TCP流或者檔案系統時,是需要處理八位流的,因此在Node.js中定義了一個Buffer類,該類用來建立一個專門的存放二進位制資料的緩衝區。
3.程式碼演示:*///buffer的建立,一共有三種建立方式:從不同維度進行建立,1建立長度為n的buffer例項,建立陣列為arr的buffer例項,建立字串str的buffer例項
//<1建立buffer例項
var buff;
//buff = new Buffer(n);//建立長度為n的Buffer例項
//buff = new Buffer(arr);//建立陣列為arr的buffer例項
//buff = new Buffer(str,encoding);//建立字串Str的Buffer例項
buff = new Buffer(10);
buff = new Buffer([10,20,30,40,50]);
buff = new Buffer("www.funoob.com","utf-8");
//<2寫入緩衝區
buff = new Buffer(256);
len = buff.write("www.runoob.com");
console.log("寫入位元組數為:"+ len);
//<3從緩衝區中讀資料buf = new Buffer(26);
for(var i = 0 ; i < 26 ; i++) {
buf[i]=+97;
}
console.log(buf.toString(`ascii`));
console.log(buf.toString(`ascii`,0,5));//截前不截後
console.log(buf.toString(`utf8`,0,5));
console.log(buf.toString(undefined,0,5));//使用utf8編碼,並輸出abcde
//<4將Buffer轉換為json物件,語法如下:buf.toJson()
var buf = new Buffer("www.runoob.com");
var json = buf.toJSON(buf);
console.log(json);
var buf = new Buffer(`我愛 node.js`);
var json = buf.toJSON(buf);
console.log(json);
//<5 緩衝區合併
var buffer1 = new Buffer(`菜鳥教程`);
var buffer2 = new Buffer(`www.runoob.com`);
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 的內容是: "+buffer3.toString());
//<6 緩衝區比較
/* Node Buffer 比較的函式如下所示
buf.compare(otherBuffer)*/
var buff1 = new Buffer(`ABC`);
var buff2 = new Buffer(`ABCD`);
var result = buff1.compare(buff2);
if(result < 0) {
console.log(buff1 + "在" + buff2 + "之前");
}else if(result == 0) {
console.log(buff1 + "在" + buff2 + "相同");
}else {
console.log(buff1 + "在" + buff2 + "之後");
}
//<7 拷貝緩衝區
/* 語法為 buf.copy(targetBuffer) 將呼叫copy方法
的緩衝區中內容拷貝到targetBuffer中
*/
var buffer1 = new Buffer(`ABC`);
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2`s content is : "+ buffer2.toString());
//<8 緩衝區裁剪
var buffer1 = new Buffer(`runoob`);
var buffer2 = buffer1.slice(0,2);//裁剪是包前不包後end索引指向的元素並不被包含在裁剪之後的內容當中
console.log("buffer2`s content is : "+buffer2.toString());
//<9 緩衝區長度
/*緩衝區長度計算語法如下所示:
buf.length;
返回值: 返回buffer物件所佔據的記憶體長度
*/
var buffer = new Buffer(`我愛 www.runoob.com `);
var len = buffer.length;//計算的是buff中位元組的個數,而非傳統的java中length的字元長度
console.log("buffer`s length is : "+len);
注意:以上程式碼可以直接拷貝至node.js檔案當中
執行結果
$ node buff.js
寫入位元組數為:14
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
{ type: `Buffer`,
data: [ 119, 119, 119, 46, 114, 117, 110, 111, 111, 98, 46, 99, 111, 109 ] }
{ type: `Buffer`,
data: [ 230, 136, 145, 231, 136, 177, 32, 110, 111, 100, 101, 46, 106, 115 ] }
buffer3 的內容是: 菜鳥教程www.runoob.com
ABC在ABCD之前
buffer2`s content is : ABC
buffer2`s content is : ru
buffer`s length is : 22
完。
部落格搬家:大坤的個人部落格
歡迎評論哦~
相關文章
- Node.js Buffer(緩衝區)Node.js
- 8、Node.js Buffer(緩衝區)Node.js
- Node.js 中的緩衝區(Buffer)究竟是什麼?Node.js
- 為什麼node.js要引入buffer?淺析緩衝區bufferNode.js
- MySQL中讀頁緩衝區buffer poolMySql
- log buffer(日誌緩衝區)
- Java NIO 之 Buffer(緩衝區)Java
- Java-NIO之Buffer(緩衝區)Java
- Buffer Cache Size(資料緩衝區)
- Java NIO -- 緩衝區(Buffer)的資料存取Java
- Nio再學習之NIO的buffer緩衝區
- Buffer Cache(緩衝區快取)篇:keep pool(保留池)快取
- 你真的會用PostGIS中的buffer緩衝嗎?
- 緩衝區分析
- node事件迴圈 EventEmitter 非同步I/O Buffer緩衝區 模組事件MIT非同步
- 物件有多少個資料塊緩衝在Data buffer中物件
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(1)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(2)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(3)快取記憶體
- C 標準庫IO緩衝區和核心緩衝區的區別
- Java NIO:緩衝區Java
- getchar緩衝區
- 使用edit編輯緩衝區中的sqlSQL
- Java NIO 之緩衝區Java
- Unity深度緩衝區指令Unity
- Java整數緩衝區Java
- nginx 緩衝區構造Nginx
- stdio流緩衝區
- 聊聊 MySQL 網路緩衝區、net_buffer_length、max_allowed_packet 那些事MySql
- 面試官:Redis中的緩衝區瞭解嗎面試Redis
- PHP的輸出緩衝區PHP
- JavaScript WebGL 幀緩衝區物件JavaScriptWeb物件
- Linux 命令 管道 緩衝區Linux
- Java NIO2:緩衝區Java
- 動態更新——緩衝區物件物件
- 緩衝區溢位實驗
- Node.js中的BufferNode.js