欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解

 更新時(shí)間:2022年08月18日 12:02:01   作者:黎燃  
這篇文章主要介紹了Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

JavaScript語(yǔ)言本身只有字符串?dāng)?shù)據(jù)類型,沒(méi)有二進(jìn)制數(shù)據(jù)類型。 但是,在處理TCP流或文件流時(shí)必須使用二進(jìn)制數(shù)據(jù)。 因此,在node JS中,定義了一個(gè)緩沖區(qū)類來(lái)創(chuàng)建用于存儲(chǔ)二進(jìn)制數(shù)據(jù)的緩沖區(qū)。

const buf = Buffer.from('runoob', 'ascii');

在node JS中,緩沖區(qū)類是與node內(nèi)核一起發(fā)布的核心庫(kù)。 緩沖庫(kù)是node JS帶來(lái)的一種存儲(chǔ)原始數(shù)據(jù)的方法,它允許節(jié)點(diǎn)JS。

console.log(buf.toString('hex'));
console.log(buf.toString('base64'));

原始數(shù)據(jù)存儲(chǔ)在buffer類的實(shí)例中。緩沖區(qū)類似于整數(shù)數(shù)組,但它對(duì)應(yīng)于V8堆內(nèi)存之外的一段原始內(nèi)存。

寫入緩沖區(qū)

寫入 Node 緩沖區(qū)的語(yǔ)法如下所示:

buf.write(string[, offset[, length]][, encoding])
  • string - 寫入緩沖區(qū)的字符串。
  • offset - 緩沖區(qū)開(kāi)始寫入的索引值,默認(rèn)為 0 。
  • length - 寫入的字節(jié)數(shù),默認(rèn)為 buffer.length
  • encoding - 使用的編碼。默認(rèn)為 'utf8' 。
buf = Buffer.alloc(256);
len = buf.write("www.runoob.com");
console.log("寫入字節(jié)數(shù) : "+  len);

輸出為:

$node main.js 寫入字節(jié)數(shù) : 14

buf.write(string[, offset[, length]][, encoding]) 根據(jù)參數(shù)偏移量和指定的編碼方法將參數(shù)字符串?dāng)?shù)據(jù)寫入緩沖區(qū)。偏移量的默認(rèn)值為0,默認(rèn)編碼方法為utf8。 長(zhǎng)度是要寫入的字符串的字節(jié)大小。返回?cái)?shù)字類型,指示寫入了多少8位字節(jié)流。 如果緩沖區(qū)沒(méi)有足夠的空間容納整個(gè)字符串,它將只寫入部分字符串。默認(rèn)情況下,長(zhǎng)度是緩沖區(qū)長(zhǎng)度-偏移量此方法似乎無(wú)法寫入某些字符。

buf.writeDoubleBE(value, offset[, noAssert]) 根據(jù)傳遞的偏移量和指定的endian格式將值寫入緩沖區(qū)。 注意:值必須是有效的64位雙精度值。如果參數(shù)noassert為真,則不會(huì)驗(yàn)證值和偏移參數(shù)。 這意味著該值可能太大,或者偏移量可能超過(guò)緩沖區(qū)的末尾,從而導(dǎo)致丟棄該值。 默認(rèn)值為false。

從流中讀取數(shù)據(jù)

var fs = require("fs");
var data = '';

創(chuàng)建可讀流

var readerStream = fs.createReadStream('input.txt');

設(shè)置編碼為 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í)行完畢");

管道流

管道為輸出流到輸入流提供了一種機(jī)制。通常我們使用它從一個(gè)流中獲取數(shù)據(jù)并將其傳遞給另一個(gè)流。 創(chuàng)建一個(gè)可讀流

var readerStream = fs.createReadStream('input.txt');

創(chuàng)建一個(gè)可寫流

var writerStream = fs.createWriteStream('output.txt');

管道讀寫操作,讀取 input.txt 文件內(nèi)容,并將內(nèi)容寫入到 output.txt 文件中。

readerStream.pipe(writerStream);

鏈?zhǔn)搅?/h3>

鏈接是一種將輸出流連接到另一個(gè)流并創(chuàng)建多個(gè)流操作鏈的機(jī)制。鏈流通常用于管道操作。 接下來(lái),我們使用管道和鏈來(lái)壓縮和解壓縮文件。

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。 接下來(lái),讓我們解壓文件并創(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é)點(diǎn)的文件。js相互調(diào)用,節(jié)點(diǎn)。js提供了一個(gè)簡(jiǎn)單的模塊系統(tǒng)。 模塊是JS應(yīng)用程序的基本組件,文件和模塊是一一對(duì)應(yīng)的。 換句話說(shuō),node JS文件是一個(gè)模塊。該文件可以是JavaScript代碼、JSON或編譯的C/C++擴(kuò)展。 hello.js

function Hello() { 
    var name; 
    this.setName = function(thyName) { 
        name = thyName; 
    }; 
    this.sayHello = function() { 
        console.log('Hello ' + name); 
    }; 
}; 

模塊接口中唯一的變化是使用模塊Exports=Hello,而不是Exports world=function(){} 當(dāng)模塊被外部引用時(shí),其接口對(duì)象是要輸出的Hello對(duì)象本身,而不是原始導(dǎo)出。

var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

以上就是Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解的詳細(xì)內(nèi)容,更多關(guān)于Node.js模塊系統(tǒng)Buffer Stream的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用Node.js判斷png圖片是否存在透明像素

    如何使用Node.js判斷png圖片是否存在透明像素

    這篇文章主要給大家介紹了關(guān)于如何使用Node.js判斷png圖片是否存在透明像素的相關(guān)資料,文中將實(shí)現(xiàn)的原理以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • 在koa中簡(jiǎn)單使用Websocket連接的方法示例

    在koa中簡(jiǎn)單使用Websocket連接的方法示例

    本文主要介紹了在koa中簡(jiǎn)單使用Websocket連接的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • node下使用UglifyJS壓縮合并JS文件的方法

    node下使用UglifyJS壓縮合并JS文件的方法

    下面小編就為大家分享一篇node下使用UglifyJS壓縮合并JS文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 如何能分清npm cnpm npx nvm

    如何能分清npm cnpm npx nvm

    這篇文章主要介紹了如何能分清npm cnpm npx nvm,本文就詳細(xì)的來(lái)介紹一下區(qū)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • node.js中的forEach()是同步還是異步呢

    node.js中的forEach()是同步還是異步呢

    這篇文章主要討論并驗(yàn)證了node.js中的forEach()是同步還是異步,思路和方法分享給大家,有需要的小伙伴可以參考下。
    2015-01-01
  • Node.js中的事件驅(qū)動(dòng)編程詳解

    Node.js中的事件驅(qū)動(dòng)編程詳解

    這篇文章主要介紹了Node.js中的事件驅(qū)動(dòng)編程詳解,本文主要講解理論性知識(shí),如什么是事件驅(qū)動(dòng)編程、什么是閉包、閉包如何幫助異步編程等知識(shí),需要的朋友可以參考下
    2014-08-08
  • Node.js打包管理工具NPM用法

    Node.js打包管理工具NPM用法

    這篇文章介紹了Node.js打包管理工具NPM的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 詳解node.js 事件循環(huán)

    詳解node.js 事件循環(huán)

    這篇文章主要介紹了node.js 事件循環(huán)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Yapi安裝部署詳細(xì)圖文教程

    Yapi安裝部署詳細(xì)圖文教程

    YApi 是一個(gè)可本地部署的、打通前后端及QA的、可視化的接口管理平臺(tái),下面這篇文章主要給大家介紹了關(guān)于Yapi安裝部署的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • node 使用 async 控制并發(fā)的方法

    node 使用 async 控制并發(fā)的方法

    這篇文章主要介紹了node 使用 async 控制并發(fā)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論