天天看點

工作筆記:node中讀取檔案流(createReadStream)資訊不全

工作中有一個需求是手動維護一個路由檔案(項目太大,該檔案隻維護關鍵内容--name/key/children),通過node讀取該檔案内容,設定想要的格式并輸出到最終路由檔案。通過指令行運作node即可生成檔案内容。

由于項目太大,手動維護檔案一直在不停地往裡面添加路由關鍵資訊。直到有一天,同僚告訴我無法運作node指令,報錯!!!

經過一番問題排查,初步判定可能是因為檔案太大了。列印生成内容發現傳回的是undefind。

前幾次列印createReadStream中on('data')的data值都發現能通路到結尾,于是,以為是fs.wirteFile()的問題。然後,我在網上查詢說需要createReadStream、createWriteStream讀寫大檔案。于是,我準備采用createWriteStream。

結果,問題又來了!!!createReadStream讀取的内容不全了。

好吧!隻能又在網上去查詢關于createReadStream讀取内容不全的問題。經過網上多方的資料查詢發現,createReadStream在讀取檔案時,每次都會讀取一定長度的内容,也就是說,這個會有大小限制。

于是,我又去官網檢視API,發現:createReadStream傳回的流(

highWaterMark

)的預設大小是 64 kb  。我傳回目錄看了一下檔案大小是66Kb!!!好吧,我明白了!

fs.createReadStream(path, { highWaterMark: 100 * 1024 })
           

這下該夠了吧?去重新運作了一下,嘿,可以了!!!

雖然代碼改動不大,也還是花費了我将近一個小時才找到原因,并解決!也算是一個經驗了!