我需要扫描换行符分隔的文本文件,每行可能超过一百万行。由于网络服务器的限制,合理地做到这一点的唯一方法是将过程分解为更小的扫描块。
我能够找到的一种方法是使用Scanner
并跳过线,直到达到所需的线索引...但这对于大量扫描而言,其开销不足访问包含数十万行的文件。
RandomAccessFile.skip()
和InputReader.skip()
都允许搜索,但它是以字节为单位测量的,我不能保证每一行都有相同的字节数。有没有办法根据分隔符而不是按字节跳过几行?
或者还有其他办法解决这个问题吗?
答案 0 :(得分:3)
如果要从特定行开始,则必须计算新行字符。除了某种形式的线性扫描之外,没有办法做到这一点。新行字符不是"特殊"从文件系统的角度来看。
我对Scanner的性能经验不佳。我认为最好的办法是使用带有大缓冲区的BufferedReader
。
如果您反复使用同一个文件,则应为行偏移创建一个索引,以便快速搜索给定的行。
答案 1 :(得分:1)
没有。如果您的行是可变长度的,那么您需要分析空白以确定它们的结束位置,那么除了顺序扫描文件之外别无选择。您可以用一种方式编写代码,以掩盖您这样做的事实,但这并不会改变性能特征。
答案 2 :(得分:0)
为什么你需要通过线路寻找?抓取一大块N个字节,在最后一个换行符之前进行任何处理。将有一些字节未处理,可能该数字将为零。使用它来退后一步,抓住另一块N字节,依此类推。 (这可能比将部分粘合在一起更容易)
(我假设您正在寻找对整个文件进行某种处理。如果您正在尝试寻找某些行k,请让您的处理步骤为&# 34;计算换行符")