我正在读取CSV文件,解析它并存储数据,非常简单。
现在正在使用标准readLine()
方法来做到这一点,我正试图从这个处理循环中挤出一些额外的效率。我不知道他们在幕后隐藏了多少,但我认为每次调用getLine
都是一个新的操作系统调用,带来了所有的痛苦?我不想在每行输入上支付OS调用。我会提供一个巨大的缓冲区,并让它一次用多行填充缓冲区。
但是,我只关心全线。我不想处理从一个缓冲区读取维护部分行以附加到第二个缓冲区读取以形成一个完整的行,这只是丑陋和恼人。
那么,有没有一种方法能为我做到这一点?似乎几乎必须如此。我可以指示读取x行数或x字节但不输出最后一个部分行的任何方法,或者甚至是我管理内存缓冲区的简单方法,因此我最小化处理部分字符串的代码量不胜感激。我可以使用Boost,但如果标准C ++中有一个方法,我宁愿这样做。
感谢。
答案 0 :(得分:2)
你不可能比内置的C ++流做得更好。他们很快。通常,完全读取文件的最快方法是使用单个线程从头到尾读取整个文件,特别是如果文件在磁盘上是连续的。此外,在读取过程中,磁盘可能比操作系统更容易成为瓶颈。如果您需要提高应用的性能,我会提出一些建议。
答案 1 :(得分:0)
我是java程序员,但我仍有提示...在流中读取数据。这意味着例如2或5倍2048字节(或更多)...你可以遍历流(并转换它)并搜索你的行结束(或其他一些char)...但我认为“readLine”无论如何都在做同样的事情......