對於支持逐行處理的算法,lua文檔建議在while循環中使用io.lines()
比io:read("*line")
更有效。io.lines()是否流式傳輸文件?
調用io.read(「* line」)返回當前輸入 文件中的下一行,不帶換行符。 (...)但是,要逐行遍歷整個文件,我們最好使用io.lines迭代器。 (21.1 – The Simple I/O Model)
我可以想象三種可能的原因,io.lines()
呼叫是首選。
- 迭代器比while循環
- 文件讀取更有效地處理更加高效
- 它更容易閱讀/維護代碼
lua的文檔也促進啜文件
(Y)ou應該總是考慮替代讀取整個文件 與選項 「*所有」 從io.read,然後使用gfind打破它(21.1 – The Simple I/O Model)
假設:io:read("*line")
流文件。如果lua中slurping的效率更高,並且io.lines()
會掠奪該文件,那麼io.lines()
可能會因此而更加高效。
然而,the unofficial Lua FAQ有以下談談io.lines()
請注意,這是一個迭代器,這不會帶來 整個文件到內存中開始。
這建議流式傳輸而不是sl漿式。
TLDRio.lines()
是否曾將整個文件保存在內存中,還是一次只保存一行內存?在while循環中,其內存使用量是否與io:read("*line")
不同?
爲了澄清,io.lines是否曾將整個文件保存在內存中?我知道我一次只能訪問一行,但是它的內存使用情況不同於io:while(while)循環中的read(「* line」)? – Cecilia