Node.js處理資料IO

山有木xi發表於2020-04-06

在JavaScript中,對於字串的操作已經十分便捷,不存在二進位制資料型別,這些對字串的簡單操作和DOM操作基本上已經可以滿足前端的需求了,但是Node.js中提供了處理檔案和I/O的功能,因此需要處理大量的二進位制資料。而在Node.js中Buffer和Stream檔案流對二進位制資料的處理提供了很好的支援

Buffer快取區

Buffer類是隨著Node.js核心一起釋出的核心庫,用於支援I/O操作中移動的資料處理。Buffer類為Node.js提供了一種儲存原始資料的方法,該方法用來在記憶體中建立一個專門存放二進位制資料的快取區,也就是說預留了一定的儲存空間在記憶體中,用來暫時儲存輸入或者輸出的資料,這樣Node.js也可以處理二進位制資料

先說 二進位制,二進位制是計算機技術中廣泛採用的一種數制,是用0和1兩個數碼來表示的資料,由於計算機只能識別二進位制資料,而人們很難看懂那些0和1的組合代表什麼,所以就需要將二進位制資料轉換為人們能夠識別的字元,這就需要設定字元編碼,透過字元編碼找到相應的字符集進行轉換,最遠書的字元編碼就是ASCII

再說 Buffer的建構函式

  • new Buffer(array)

  • new Buffer(size)

  • new Buffer (str[,encoding])

  • new Buffer (Buffer)

  • new Buffer (arrayBuffer)

可以看出,引數分別是位元組,陣列,buffer物件,字串等等

再比如 寫入讀取的語法:

  • write(string[,offset[,length]][,encoding])

  • toString([encoding,state[,end]])

  • concat(list[,totallength])

Stream檔案流

由於Buffer快取區限制在1GB,超過1GB的檔案無法直接完成讀寫,在讀寫大檔案時,如果讀/寫資源一直持續不停,那麼Node.js就無法繼續其他的工作,為此,Node.js提供了Stream檔案流模組

最理想的方法就是,讀一部分,寫一部分,不論檔案的大小,只是時間的問題,總會處理完成,這就需要用到流的概念

檔案A透過流動的形式透過資料流管道,進入檔案B中,採用“讀一部分。寫一部分”的方式,流的好處就是,接收方可以提前處理,縮短時間,提高速度,就像線上看影片,並不是全部快取好了再播放,而是看一部分,快取一部分

Stream四種流型別

  • Readable

  • Writable

  • Duplex

  • Transform

而在使用大檔案複製時,透過可讀流的chunk引數傳遞資料,chunk就像接資料的盆,在可讀流中還有一個函式叫 pipe(),這個函式是一個很高效的檔案處理方式,可以簡化之前複製檔案的操作,所以,使用pipe進行完成資料的讀取和寫入也是很重要的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2684621/,如需轉載,請註明出處,否則將追究法律責任。

相關文章