编辑:@每个人抱歉,我觉得与int32的大小混为一谈。问题可以结束,但是由于已经有几个答案,因此我选择了第一个。以下是原始问题,仅供参考
我正在寻找一种从非常大的文本文件加载特定行的方法,并且我计划使用File.ReadLines和Skip()方法:
File.ReadLines(fileName).Skip(nbLines).Take(1).ToArray();
问题是,Skip()
需要一个int
值,并且int值限制为200万左右。对于大多数文件来说应该没问题,但是如果文件包含2000万行,该怎么办?我尝试使用long,但是Skip()的重载没有接受long。
行是可变的,长度未知,因此我无法计算字节数。
是否有一种选项不涉及逐行读取文件或将文件拆分成块?此操作必须非常快。
整数是32位数字,因此限制为20亿左右。
就是说,如果您必须从文件中随机读取一行,并且只知道文件包含行,则必须逐行读取它,直到到达所需的行为止。您可以使用一些缓冲区来减轻I / O的负担(默认情况下它们处于打开状态),但是没有比这更好的性能了。
除非您更改文件的保存方式。如果您可以创建一个索引文件,其中包含主文件中每一行的位置,则可以使读取行无限快。
哦,不是无限的,一但有很多快-从O(N)几乎为O(1)(差不多,因为这取决于操作系统如何呢寻求一个随机字节的文件可能不是一个O(1)操作,它)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句