緩衝(buffer)模組
js一開始就是為瀏覽器而設計的,所以能很好的處理unicode編碼的字串,但不能很好的處理二進位資料。這是Node.js的一個問題,因為Node.js旨在網路上發送和接收經常是以二進位格式傳輸的資料。如:
- 透過TCP連線發送和接收資料;
- 從影像或壓縮檔案讀取二進位資料;
- 從檔案系統讀寫資料;
- 處理來自網路的二進位資料流
而Buffer模組為Node.js帶來了一種儲存原始資料的方法,於是可以再js的上下文中使用二進位資料。每當需要在Node.js中處理I/O操作中移動的資料時,就有可能使用Buffer模組。
類別:Buffer
Buffer 類別是一個全域變數類型,用來直接處理2進位資料的。 它能夠使用多種方式建構。
原始資料保存在 Buffer 類別的實例中。一個 Buffer 實例類似一個整數數組
1.new Buffer(size):分配一個新的 buffer 大小是 size 的8位元組.
2.new Buffer(array):分配一個新的 buffer 使用一個8位元組 array 數組.
3.new Buffer(str, [encoding]):encoding String類型 - 使用什麼編碼方式,參數可選.
4.類別方法: Buffer.isEncoding(encoding):如果給定的編碼 encoding 是有效的,則傳回 true,否則傳回 false。
5.類別方法: Buffer.isBuffer(obj):測試這個 obj 是否是一個 Buffer. 回傳Boolean
6.類別方法: Buffer.concat(list, [totalLength]):list {Array}陣列類型,Buffer數組,用於被連接。 totalLength {Number}類型 上述Buffer數組的所有Buffer的總大小。
除了可以讀取檔案得到Buffer的實例外,還能夠直接構造,例如:
var bin = new Buffer([ 0x48, 0x65, 0x6c, 0x6c, 0x6c ]);
Buffer與字串類似,除了可以用.length屬性得到位元組長度外,還可以用[index]方式讀取指定位置的位元組,例如:
bin[0]; // => 0x48;
Buffer與字串能夠互相轉化,例如可以使用指定編碼將二進位資料轉化為字串:
var str = bin.toString('utf-8'); // => "hello"
.slice方法不是傳回一個新的Buffer,而更像是傳回了指向原Buffer中間的某個位置的指針,如下所示。
1.[ 0x48, 0x65, 0x6c, 0x6c, 0x6c ]
2. ^ ^
3. | |
4. bin bin.slice(2)
寫入緩衝區
var buffer = new Buffer(8);//建立一個分配了8個位元組記憶體的緩衝區
console.log(buffer.write('a','utf8'));//輸出1
這會將字元"a"寫入緩衝區,node傳回經過編碼以後寫入緩衝區的位元組數量,這裡的字母a的utf-8編碼佔用1個位元組。
複製緩衝區
Node.js提供了一個將Buffer物件整體內容複製到另一個Buffer物件中的方法。我們只能在已經存在的Buffer物件之間複製,所以必須建立它們。
buffer.copy(bufferToCopyTo)
其中,bufferToCopyTo是要複製的目標Buffer物件。如下範例:
var buffer1 = new Buffer(8);
buffer1.write('nice to meet u','utf8');
var buffer2 = new Buffer(8);
buffer1.copy(buffer2);
console.log(buffer2.toString());//nice to meet u
流模組
在UNIX類型的作業系統中,流是個標準的概念。有以下三個主要的流:
1.標準輸入
2.標準輸出
3.標準錯誤
可讀流
如果說,緩衝區是Node.js處理原始資料的方式的話,那麼流通常是Node.js移動資料的方式。 Node.js中的流是可讀的或可寫的。 Node.js中許多模組都使用了流,包括HTTP和檔案系統。
假設我們建立一個classmates.txt的文件,並從中讀入姓名清單,以便使用這些資料。由於資料是流,這意味著完成檔案讀取之前,從收到最初幾個位元組開始,就可以對資料動作,這是Node.js中的一個常見模式:
var fs = require('fs');
var stream = fs.ReadStream('classmates.txt');
stream.setEncoding('utf8');
stream.on('data', function (chunk) {
console.log('read some data')
});
stream.on('close', function () {
console.log('all the data is read')
});
在上述範例中,在收到新資料時觸發事件資料。當文件讀取完成後觸發關閉事件。
可寫流
顯然,我們也可以建立可寫流以便寫資料。這意味著,只要一段簡單的腳本,就可以使用流讀入檔案然後寫入另一個檔案:
var fs = require('fs');
var readableStream = fs.ReadStream('classmates.txt');
var writableStream = fs.writeStream('names.txt');
readableStream.setEncoding('utf8');
readableStream.on('data', function (chunk) {
writableStream.write(chunk);
});
readableStream.on('close', function () {
writableStream.end();
});
現在,當接收到資料事件時,資料會被寫入可寫流中。
readable.setEncoding(encoding):回傳: this
readable.resume():同上。此方法讓可讀流繼續觸發 data 事件。
readable.pause():同上。此方法會使一個處於流動模式的流停止觸發 data 事件,切換到非流動模式,並讓後續可用資料留在內部緩衝區。
類別: stream.Writable
Writable(可寫入)流介面是對您正在寫入資料至一個目標的抽象化。
1.writable.write(chunk, [encoding], [callback]):
chunk {String | Buffer} 要寫入的資料
encoding {String} 編碼,假如 chunk 是一個字串
callback {Function} 資料塊寫入後的回呼
傳回: {Boolean} 如果資料已全部處理則 true。
此方法向底層系統寫入數據,並在資料處理完畢後呼叫所給予的回調。
2.writable.cork():強行滯留所有寫入。
滯留的資料會在 .uncork() 或 .end() 呼叫時寫入。
3.writable.end([chunk], [encoding], [callback])
chunk {String | Buffer} 可選,要寫入的資料
encoding {String} 編碼,假如 chunk 是一個字串
callback {Function} 可選,流結束後的回呼
在呼叫 end() 後呼叫 write() 會產生錯誤。
// 寫入 'hello, ' 然後以 'world!' 結束
http.createServer(function (req, res) {
res.write('hello, ');
res.end('world!');
// 現在不允許繼續寫入了
});

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。