最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年03月21日 15:16:49   作者:小六公子  
Node.js是一個基于Chrome?V8引擎的JavaScript運行時。類似于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ò)流或文件流時,必須使用到二進(jìn)制數(shù)據(jù)。因此在Node.js中定義了一個Buffer類,用來創(chuàng)建一個專門存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。所以緩存區(qū)就是在內(nèi)存中開辟一個臨時用于存儲需要運算的字節(jié)碼的區(qū)域。

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

在Node.js中提供了一個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個字符 [1]  。示例如下所示:

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

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

示例如下所示:

通過以上示例,可以看出,在Node.js中,采用UTF-8編碼,1個英文字符占1個字節(jié);1個中文漢字3-4個字節(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ū)時,轉(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)容從一個緩存區(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. 同步直接讀取

同步方式直接返回數(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ù)據(jù)從硬盤中一節(jié)一節(jié)的讀取。循環(huán)讀取一節(jié)就觸發(fā)回調(diào)函數(shù),以實現(xiàn)大文件操作。

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

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)建時間等內(nèi)容,如下所示:

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

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

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

7. 刪除文件

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

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

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

8. 管道

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

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

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

以上方式稍微有點復(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ù)流通過管道鏈接起來,實現(xiàn)鏈?zhǔn)焦芾?。如壓縮等方式。

 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檢測端口是否被占用的方法

    利用Node.js檢測端口是否被占用的方法

    這篇文章主要給大家介紹了關(guān)于利用Node.js檢測端口是否被占用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • mac上node.js環(huán)境的安裝測試

    mac上node.js環(huán)境的安裝測試

    這篇文章主要為大家詳細(xì)介紹了mac上node.js環(huán)境的安裝測試,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 如何利用node轉(zhuǎn)發(fā)請求詳解

    如何利用node轉(zhuǎn)發(fā)請求詳解

    這篇文章主要給大家介紹了關(guān)于利用node轉(zhuǎn)發(fā)請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 如何利用node實現(xiàn)發(fā)送QQ郵箱驗證碼

    如何利用node實現(xiàn)發(fā)送QQ郵箱驗證碼

    我們在開發(fā)網(wǎng)站時,發(fā)送驗證碼的功能是必定會遇到的,下面這篇文章主要給大家介紹了關(guān)于如何利用node實現(xiàn)發(fā)送QQ郵箱驗證碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Google官方支持的NodeJS訪問API,提供后臺登錄授權(quán)

    Google官方支持的NodeJS訪問API,提供后臺登錄授權(quán)

    Google官方支持的NodeJS集成客戶端,用以訪問Google APIs, 支持OAuth 2.0授信及登錄認(rèn)證。登錄以后即可在后臺訪問例如 Google Drive(云存儲), Google Analytics, Gmail等服務(wù)。
    2014-07-07
  • 詳解用node-images 打造簡易圖片服務(wù)器

    詳解用node-images 打造簡易圖片服務(wù)器

    本篇文章主要介紹了詳解用node-images 打造簡易圖片服務(wù)器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • node.js中使用node-schedule實現(xiàn)定時任務(wù)實例

    node.js中使用node-schedule實現(xiàn)定時任務(wù)實例

    這篇文章主要介紹了node.js中使用node-schedule實現(xiàn)定時任務(wù)實例,包括安裝方法和4種使用例子,需要的朋友可以參考下
    2014-06-06
  • node.js cookie-parser之parser.js

    node.js cookie-parser之parser.js

    這篇文章主要介紹node.js cookie-parser之parser.js,講解的比較詳細(xì),需要的朋友可以參考下。
    2016-06-06
  • 利用Decorator如何控制Koa路由詳解

    利用Decorator如何控制Koa路由詳解

    最近學(xué)習(xí)了plover的底層框架koa,所以下面這篇文章主要給大家介紹了關(guān)于利用Decorator如何控制Koa路由的相關(guān)資料,,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來隨著小編一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • 解決Window10系統(tǒng)下Node安裝報錯的問題分析

    解決Window10系統(tǒng)下Node安裝報錯的問題分析

    今天電腦重裝了win10系統(tǒng),在安裝Node的過程中出現(xiàn)了下面的問題,下面就和大家分享下用來解決這種問題的小方法
    2016-12-12

最新評論

桃源县| 蛟河市| 靖安县| 滨海县| 涡阳县| 巫山县| 甘孜县| 沐川县| 隆化县| 伊通| 芦溪县| 韩城市| 柳河县| 临猗县| 金湖县| 涪陵区| 洛南县| 东丽区| 云霄县| 大新县| 扶风县| 芒康县| 沙湾县| 苗栗市| 收藏| 积石山| 青铜峡市| 托克托县| 阳信县| 壤塘县| 垦利县| 兰溪市| 黑龙江省| 驻马店市| 沐川县| 明水县| 彰化县| 平舆县| 金乡县| 阿拉善右旗| 本溪市|