readString vs readLine

时间:2019-03-25 21:31:59

标签: go io

我正在编写一个应用程序以逐行读取文件列表并进行一些处理。我想使用尽可能少的RAM。 我遇到了这个问题https://stackoverflow.com/a/41741702/3531263

发帖人说readString比readLine使用更多的RAM,并且他们已经发布了一些代码。 我不明白的是一个人如何使用更多的RAM?因为最终,他们的代码编写方式仍在将整个行写入其缓冲区。那不是意味着如果他们只是使用readString,那会是同一回事吗?

2 个答案:

答案 0 :(得分:4)

  

编写代码的方式,他们仍然将整行写到缓冲区中

是的,是的。 您的代码可能不需要整个行都同时存储在内存中。例如,您的程序正在按请求ID(位于该行的开头)过滤日志文件。它不需要读取整个行(可能是几兆字节或更多),而只是由于请求ID错误而拒绝它。但是使用ReadString时,您就没有选择的余地。

答案 1 :(得分:2)

我同意塞尔吉奥。另外,请查看标准库中的the current implementationReadLine调用ReadSlice('\n')一次,然后遍历几个分支以确保转换后的数据返回适当的哨兵值或错误。另一方面,ReadBytesReadString都循环遍历对ReadSlice(delim)的重复调用,因此得出结论,它们将必须至少复制 数据到记忆为ReadLine,并且在第一次调用中可能更多if the delimiter wasn't found