对于支持逐行处理的算法,lua文档建议在while循环中使用io.lines()
比io:read("*line")
更有效。
调用io.read(“* line”)返回当前输入的下一行 文件,没有换行符。 (...)但是,要迭代一个 整个文件一行一行,我们最好使用io.lines迭代器。 (21.1 – The Simple I/O Model)
我可以想象io.lines()
电话首选的三个可能原因。
lua文档还宣传了诽谤文件
(Y)你应该总是考虑阅读整个文件的替代方案 使用来自io.read的选项“* all”然后使用gfind将其分解(21.1 – The Simple I/O Model)
假设:io:read("*line")
流式传输文件。如果lua中的slurping更有效,并且io.lines()
会使文件出现问题,那么io.lines()
可能因此更有效率。
但是,the unofficial Lua FAQ对io.lines()
请注意,它是一个迭代器,这不会带来 最初将整个文件存入内存。
这表明流式传输而不是啜饮。
TLDR io.lines()
是否将整个文件保存在内存中,或者一次只在内存中保留一行?它的内存使用量是否与while循环中的io:read("*line")
不同?
答案 0 :(得分:2)
io.lines()
不会将整个文件保存在内存中:它一次读取一行文件,而不是一次读取整个文件。为此,请使用io.read("*all")
。