Node.js實戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解
正文
JavaScript語言本身只有字符串數據類型,沒有二進制數據類型。 但是,在處理TCP流或文件流時必須使用二進制數據。 因此,在node JS中,定義了一個緩沖區(qū)類來創(chuàng)建用于存儲二進制數據的緩沖區(qū)。
const buf = Buffer.from('runoob', 'ascii');
在node JS中,緩沖區(qū)類是與node內核一起發(fā)布的核心庫。 緩沖庫是node JS帶來的一種存儲原始數據的方法,它允許節(jié)點JS。
console.log(buf.toString('hex'));
console.log(buf.toString('base64'));
原始數據存儲在buffer類的實例中。緩沖區(qū)類似于整數數組,但它對應于V8堆內存之外的一段原始內存。
寫入緩沖區(qū)
寫入 Node 緩沖區(qū)的語法如下所示:
buf.write(string[, offset[, length]][, encoding])
- string - 寫入緩沖區(qū)的字符串。
- offset - 緩沖區(qū)開始寫入的索引值,默認為 0 。
- length - 寫入的字節(jié)數,默認為 buffer.length
- encoding - 使用的編碼。默認為 'utf8' 。
buf = Buffer.alloc(256);
len = buf.write("www.runoob.com");
console.log("寫入字節(jié)數 : "+ len);
輸出為:
$node main.js 寫入字節(jié)數 : 14
buf.write(string[, offset[, length]][, encoding]) 根據參數偏移量和指定的編碼方法將參數字符串數據寫入緩沖區(qū)。偏移量的默認值為0,默認編碼方法為utf8。 長度是要寫入的字符串的字節(jié)大小。返回數字類型,指示寫入了多少8位字節(jié)流。 如果緩沖區(qū)沒有足夠的空間容納整個字符串,它將只寫入部分字符串。默認情況下,長度是緩沖區(qū)長度-偏移量此方法似乎無法寫入某些字符。
buf.writeDoubleBE(value, offset[, noAssert]) 根據傳遞的偏移量和指定的endian格式將值寫入緩沖區(qū)。 注意:值必須是有效的64位雙精度值。如果參數noassert為真,則不會驗證值和偏移參數。 這意味著該值可能太大,或者偏移量可能超過緩沖區(qū)的末尾,從而導致丟棄該值。 默認值為false。
從流中讀取數據
var fs = require("fs");
var data = '';
創(chuàng)建可讀流
var readerStream = fs.createReadStream('input.txt');
設置編碼為 utf8。
readerStream.setEncoding('UTF8');
處理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
data += chunk;
});
readerStream.on('end',function(){
console.log(data);
});
readerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程序執(zhí)行完畢");
管道流
管道為輸出流到輸入流提供了一種機制。通常我們使用它從一個流中獲取數據并將其傳遞給另一個流。 創(chuàng)建一個可讀流
var readerStream = fs.createReadStream('input.txt');
創(chuàng)建一個可寫流
var writerStream = fs.createWriteStream('output.txt');
管道讀寫操作,讀取 input.txt 文件內容,并將內容寫入到 output.txt 文件中。
readerStream.pipe(writerStream);
鏈式流
鏈接是一種將輸出流連接到另一個流并創(chuàng)建多個流操作鏈的機制。鏈流通常用于管道操作。 接下來,我們使用管道和鏈來壓縮和解壓縮文件。
var fs = require("fs");
var zlib = require('zlib');
壓縮 input.txt 文件為 input.txt.gz
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
執(zhí)行上述操作后,我們可以看到輸入Txt壓縮文件input.Txt.gz。 接下來,讓我們解壓文件并創(chuàng)建解壓JS文件,代碼如下:
var fs = require("fs");
var zlib = require('zlib');
解壓 input.txt.gz 文件為 input.txt
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));
模塊系統(tǒng)
以便啟用節(jié)點的文件。js相互調用,節(jié)點。js提供了一個簡單的模塊系統(tǒng)。 模塊是JS應用程序的基本組件,文件和模塊是一一對應的。 換句話說,node JS文件是一個模塊。該文件可以是JavaScript代碼、JSON或編譯的C/C++擴展。 hello.js
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
模塊接口中唯一的變化是使用模塊Exports=Hello,而不是Exports world=function(){} 當模塊被外部引用時,其接口對象是要輸出的Hello對象本身,而不是原始導出。
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();

以上就是Node.js實戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解的詳細內容,更多關于Node.js模塊系統(tǒng)Buffer Stream的資料請關注腳本之家其它相關文章!
相關文章
nodejs使用redis作為緩存介質實現(xiàn)的封裝緩存類示例
這篇文章主要介紹了nodejs使用redis作為緩存介質實現(xiàn)的封裝緩存類,涉及nodejs操作redis進行緩存設置相關操作技巧,需要的朋友可以參考下2018-02-02
Node.js實戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解
這篇文章主要介紹了Node.js實戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
Win7系統(tǒng)只能安裝的nodejs13.14,如何安裝高版本nodejs
正常情況下,Win7支持的Node.js最高版本是V13.14,但在開發(fā)過程中,有不少Vue項目或其他需要依賴Node環(huán)境的項目,對Node版本要求都比較高,對此,我們要么重裝操作系統(tǒng)到Win8以上,要么就得想辦法在Win7中安裝高版本的Node,否則很多項目在編譯打包時可能會出現(xiàn)警告信息或失敗2024-11-11

