对于支持逐行处理的算法,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