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

Node.js基礎(chǔ)入門之緩存區(qū)與文件操作詳解

 更新時(shí)間:2022年03月21日 15:16:49   作者:小六公子  
Node.js是一個(gè)基于Chrome?V8引擎的JavaScript運(yùn)行時(shí)。類似于Java中的JRE,.Net中的CLR。本文將詳細(xì)為大家介紹Node.js中的緩存區(qū)與文件操作,感興趣的可以了解一下

經(jīng)過前面三天的學(xué)習(xí),Node.js的基礎(chǔ)知識已逐漸掌握,今天繼續(xù)學(xué)習(xí)緩存區(qū)和文件操作,并稍加整理加以分享,如有不足之處,還請指正。

緩存區(qū)

1. 什么是緩存區(qū)?

JavaScript語言自身只有基本數(shù)據(jù)類型(如:字符串),沒有二進(jìn)制數(shù)據(jù)類型。二進(jìn)制數(shù)據(jù)可以存儲電腦中任何數(shù)據(jù)(如:一段文本,一張圖片等)。Node.js作為服務(wù)端,在處理TCP網(wǎng)絡(luò)流或文件流時(shí),必須使用到二進(jìn)制數(shù)據(jù)。因此在Node.js中定義了一個(gè)Buffer類,用來創(chuàng)建一個(gè)專門存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。所以緩存區(qū)就是在內(nèi)存中開辟一個(gè)臨時(shí)用于存儲需要運(yùn)算的字節(jié)碼的區(qū)域。

2. 創(chuàng)建指定長度的緩存區(qū)

在Node.js中提供了一個(gè)Buffer對象,可以直接創(chuàng)建指定長度的緩存區(qū),如下所示:

 var buffer = Buffer.alloc(10);;
 buffer.write('abcdefghij');
 console.log(buf);

示例輸出結(jié)果,如下所示:

通過以上示例可以看出,寫入的一串英文字符,在緩存區(qū)中是以十六進(jìn)制格式顯示的。

關(guān)于字符的十六進(jìn)行表示,可以參考ASCII ((American Standard Code for Information Interchange): 美國信息交換標(biāo)準(zhǔn)代碼)。

ASCII ((American Standard Code for Information Interchange): 美國信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言。它是最通用的信息交換標(biāo)準(zhǔn),并等同于國際標(biāo)準(zhǔn)ISO/IEC 646。ASCII第一次以規(guī)范標(biāo)準(zhǔn)的類型發(fā)表是在1967年,最后一次更新則是在1986年,到目前為止共定義了128個(gè)字符 [1]  。示例如下所示:

在緩存區(qū)存儲漢字的時(shí)候,也會轉(zhuǎn)換成UTF-8編碼的字節(jié)碼,并以十六進(jìn)制表示,如下所示:

 var buffer = Buffer.alloc(10);
 buffer.write('張三');
 console.log(buffer);

示例如下所示:

通過以上示例,可以看出,在Node.js中,采用UTF-8編碼,1個(gè)英文字符占1個(gè)字節(jié);1個(gè)中文漢字3-4個(gè)字節(jié)(UTF-8編碼是變長的)。

3. 通過數(shù)組創(chuàng)建緩存區(qū)

在Node.js中,通過數(shù)組創(chuàng)建緩存區(qū),如下所示:

 var buffer = Buffer.from([97,98,99,100,101,102]);
 console.log(buffer);
 console.log(buffer.toString());

示例結(jié)果如下:

通過以上示例看出,數(shù)組的格式是十進(jìn)制整數(shù),存儲到緩存區(qū)時(shí),轉(zhuǎn)換成了十六進(jìn)行表示。

4. 通過字符串創(chuàng)建緩存區(qū)

Buffer.from方法,不僅可以通過數(shù)組創(chuàng)建,還可以傳入字符串內(nèi)容,如下所示:

 var buffer = Buffer.from("我是小六子呀!");
 console.log(buffer);
 console.log(buffer.toString());

示例結(jié)果如下所示:

5. 讀寫緩存區(qū)

在Node.js中,通過toString方法讀取緩存區(qū)的內(nèi)容,通過write方法寫入緩存區(qū)。如下所示:

 var buffer = Buffer.alloc(10);
 buffer.write('張三');
 console.log(buffer.toString());

示例如下:

6. 復(fù)制緩存區(qū)

通過copy方法,可以將緩存區(qū)內(nèi)容從一個(gè)緩存區(qū)拷貝到新的緩存區(qū)。如下所示:

 var buffer = Buffer.from("我是小六子呀!");
 var buffer2 = Buffer.alloc(21);
 console.log("復(fù)制前",buffer2);
 buffer.copy(buffer2);
 console.log("復(fù)制后:",buffer2);

示例結(jié)果如下所示:

文件操作

Node.js作為服務(wù)端程序,新增了讀取文件操作。文件I/O操作是對標(biāo)準(zhǔn)POSIX函數(shù)的簡單封裝,通過require('fs')使用該模塊,所有方法都有同步和異步的方式。讀寫文件主要有兩種方式:a.直接讀取,b.流式讀取

1. 異步直接讀取

將硬盤上的所有內(nèi)容全部讀入內(nèi)存以后才觸發(fā)回調(diào)函數(shù)。如下所示:

var fs =require('fs');
fs.readFile('./test.txt',function(err,data){
    if(err){
        console.log(err);
    }else{
        console.log(data.toString());//默認(rèn)data為Buffer類型
    }
});

示例如下所示:

2. 同步直接讀取

同步方式直接返回?cái)?shù)據(jù)內(nèi)容,不再使用回調(diào)函數(shù),如下所示:

 var fs =require('fs');
 var data = fs.readFileSync('./test.txt');
 console.log(data.toString());

3. 流式讀取

當(dāng)需要讀取的文件比較大時(shí),無法一次讀取完成,則需要采用流式讀取的方式,將數(shù)據(jù)從硬盤中一節(jié)一節(jié)的讀取。循環(huán)讀取一節(jié)就觸發(fā)回調(diào)函數(shù),以實(shí)現(xiàn)大文件操作。

假如現(xiàn)在有一個(gè)文件,采用流式讀取,如下所示:

var fs =require('fs');
//創(chuàng)建流
var stream=fs.createReadStream('./test.txt');
//監(jiān)控流獲取數(shù)據(jù)事件
stream.on('data',function(data){
    console.log('--------------------------');
    console.log(data.length);
    console.log(data);
});

讀取示例如下所示:

通過以上示例可以看出,每一次字節(jié)流讀取的數(shù)據(jù)大小為65536字節(jié),即64KB。如果文件大小大于64KB,則會分為多節(jié)進(jìn)行讀取。

4. 寫入文件

寫入文件與讀取文件相對,如下所示:

var fs =require('fs');
var test="這周都沒有上班了,在居家辦公,好不方便呀?。?!";
fs.writeFile('./test1.txt',test,function(err){
    if(err){
        console.log(err);
    }else{
        console.log('保存成功');
    }
});

示例如下:

文件默認(rèn)為utf-8編碼,如下所示:

同步寫入就是在異步寫入的方法后加入Sync即可。

5. 流式寫入文件

字節(jié)流的方式寫入文件,如下所示:

 var fs =require('fs');
 var stream = fs.createWriteStream('./input.txt');
 stream.write("小六子瀟灑呀");
 stream.write("小六公子瀟灑呀");
 stream.write("小六痞子瀟灑呀");
 stream.end();

寫入成功后,文件如下:

注意,流式寫入文件,一定要有end方法結(jié)束字節(jié)流。字節(jié)流還有其他事件,如:end,finish,error,都可以通過on進(jìn)行監(jiān)聽。

6. 讀取文件信息

Node.js不僅可以讀取寫入文件內(nèi)容,還可以讀取文件信息,如文件大小,創(chuàng)建時(shí)間等內(nèi)容,如下所示:

var fs =require('fs');
fs.stat('./test.txt',function(err,stat){
    if(err){
        console.log(err);
    }else{
        console.log(stat);
    }
});

讀取文件信息返回的是一個(gè)對象,包含文件的各個(gè)屬性,示例結(jié)果如下所示:

注意:返回的Stat對象,同時(shí)包含isFile和isDirectory方法,用于判斷路徑是否文件和文件夾。

7. 刪除文件

刪除文件可以采用unlink方法,如下所示:

var fs =require('fs');
fs.unlink('./test.txt',function(err){
    if(err){
        console.log(err);
    }else{
        console.log('刪除成功');
    }
});

如果要?jiǎng)h除的文件不存在,則會返回錯(cuò)誤信息,如果存在,則提示刪除成功。示例結(jié)果如下所示:

8. 管道

管道(pipe)提供了一個(gè)輸出流到輸入流的機(jī)制。

通常我們復(fù)制大文件,采用從一個(gè)流中獲取數(shù)據(jù),并將數(shù)據(jù)傳遞到另外一個(gè)流中。如下所示:

var fs =require('fs');
var s1=fs.createReadStream('./test.txt');
var s2 = fs.createWriteStream('./input.txt');
//以流的方式實(shí)現(xiàn)大文件復(fù)制,讀取一節(jié),傳遞一節(jié)
s1.on('data',function(data){
    s2.write(data);
});
s1.on('end',function(){
    s2.end();
    console.log('文件復(fù)制完成');
});

以上方式稍微有點(diǎn)復(fù)雜,采用管道方式,可以簡化操作,如下所示:

 var fs =require('fs');
 var s1=fs.createReadStream('./test.txt');
 var s2 = fs.createWriteStream('./input.txt');
 s1.pipe(s2);//管道方式

9. 鏈?zhǔn)搅?/h3>

將數(shù)據(jù)流通過管道鏈接起來,實(shí)現(xiàn)鏈?zhǔn)焦芾怼H鐗嚎s等方式。

 var fs =require('fs');
 var zlib =require('zlib');
 var s1=fs.createReadStream('./test.txt');
 var s2 = fs.createWriteStream('./test.zip');
 s1.pipe(zlib.createGzip()).pipe(s2);

到此這篇關(guān)于Node.js基礎(chǔ)入門之緩存區(qū)與文件操作詳解的文章就介紹到這了,更多相關(guān)Node.js緩存區(qū) 文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解node.js的http模塊實(shí)例演示

    詳解node.js的http模塊實(shí)例演示

    這篇文章主要介紹了詳解node.js的http模塊實(shí)例演示,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Yarn的安裝與使用詳細(xì)介紹

    Yarn的安裝與使用詳細(xì)介紹

    不知道大家有沒有覺察到Facebook近年大招頻出。Yarn是Facebook最近發(fā)布的一款依賴包安裝工具。Yarn是一個(gè)新的快速安全可信賴的可以替代NPM的依賴管理工具,Yarn正式發(fā)布沒幾天已經(jīng)迅速達(dá)到了數(shù)萬贊,就可以知道大家苦NPM久已。這篇文章將詳細(xì)介紹Yarn的安裝與使用。
    2016-10-10
  • Node.js如何響應(yīng)Ajax的POST請求并且保存為JSON文件詳解

    Node.js如何響應(yīng)Ajax的POST請求并且保存為JSON文件詳解

    這篇文章主要介紹了關(guān)于Node.js是如何響應(yīng)Ajax的POST請求并且保存為JSON文件的相關(guān)資料,文中介紹的很詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • 深入淺析NodeJs并發(fā)異步的回調(diào)處理

    深入淺析NodeJs并發(fā)異步的回調(diào)處理

    這篇文章主要介紹了NodeJs并發(fā)異步的回調(diào)處理的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 詳解通過源碼解析Node.js中cluster模塊的主要功能實(shí)現(xiàn)

    詳解通過源碼解析Node.js中cluster模塊的主要功能實(shí)現(xiàn)

    這篇文章主要介紹了詳解通過源碼解析Node.js中cluster模塊的主要功能實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Nestjs自定義注解實(shí)現(xiàn)接口權(quán)限控制詳解

    Nestjs自定義注解實(shí)現(xiàn)接口權(quán)限控制詳解

    這篇文章主要為大家介紹了Nestjs自定義注解實(shí)現(xiàn)接口權(quán)限控制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 安裝Node.js并創(chuàng)建Web程序

    安裝Node.js并創(chuàng)建Web程序

    這篇文章介紹了安裝Node.js并創(chuàng)建Web程序的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Node.js中,在cmd界面,進(jìn)入退出Node.js運(yùn)行環(huán)境的方法

    Node.js中,在cmd界面,進(jìn)入退出Node.js運(yùn)行環(huán)境的方法

    今天小編就為大家分享一篇Node.js中,在cmd界面,進(jìn)入退出Node.js運(yùn)行環(huán)境的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node.js中module模塊的功能理解與用法實(shí)例分析

    node.js中module模塊的功能理解與用法實(shí)例分析

    這篇文章主要介紹了node.js中module模塊的功能理解與用法,結(jié)合實(shí)例形式分析了node.js module模塊的基本功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • nodejs更改項(xiàng)目端口號的方法

    nodejs更改項(xiàng)目端口號的方法

    今天小編就為大家分享一篇nodejs更改項(xiàng)目端口號的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論