現在,許多瀏覽器都支持使用HTML5的FileReader讀取本地文件,這爲網站打開了超越「數據庫前端」的腳步,一些有用的本地數據,而不必先發送到服務器。逐行讀取FileReader對象,無需將整個文件加載到RAM中
在上傳之前預處理圖片和視頻,FileReader的一個大應用程序將從某種磁盤表格(CSV,TSV,無論)中加載數據到瀏覽器進行操作 - 可能用於繪圖或分析D3.js或在WebGL中創建風景。
問題是,StackOverflow和其他站點上的大多數示例都使用FileReader的.readAsText()屬性,該屬性在返回結果之前將整個文件讀入RAM。
javascript: how to parse a FileReader object line by line
要讀取一個文件,而無需將數據裝入RAM,一個需要使用.readAsArrayBuffer(),而這SO職位是最接近我能得到一個很好的答案:
但是,這個問題有點過於具體,並且誠實地說,我可以嘗試幾天來使解決方案更加普遍,並且因爲我不瞭解塊大小的意義而空手而出或者爲什麼使用Uint8Array。解決更一般的問題,即使用用戶可定義的行分隔符逐行讀取文件(理想情況下使用.split(),因爲它也接受正則表達式),然後每行執行一些操作(如將其打印到console.log)將是理想的。
「A溶液到的使用用戶可定義的在線分離器(理想地.split(),因爲在讀取線由行一個文件中的更一般的問題也接受正則表達式)「如果你可以使用拆分,你已經加載了整個文件... – n00dl3
如果你在閱讀它時分割成塊,那麼不需要它:) 說,讀取1Mb,拆分,處理行, 1Mb,沖洗重複:) –
您使用Uint8Array(或node.js中的緩衝區)的原因是因爲文件可能是b inary和javascript字符串不能處理二進制數據(例如,字節0x00,否則稱爲nul終止符(是的,這是nul和一個「l」)) – slebetman