【发布时间】:2011-01-20 03:58:27
【问题描述】:
我有一个格式如下的文件:
1 4298 3598 39980 58903
39 3598 395 395 3598 3598
所以每行只有一堆数字(32 位有符号整数范围内的最大数字)。
我当前的代码每次都必须解析它,首先将行拆分为字符串数组,然后将每个字符串转换为 int。有没有一种更快的方法可以通过序列化或其他方式来完成此操作,因为我必须多次检查同一个文件。换句话说,我很乐意对文件进行预处理。
【问题讨论】:
-
我不确定你在追求什么 - 将这样的文件解析为整数值列表就像 3 行代码;我看不出您想如何从中“删除大部分解析” - 请指定。
-
Errr.. 如果代码只能以二进制格式读取并假设它是 32 位数字,则可以避免很多 CPU 周期。这个文件非常非常大,我必须检查它数千次(内存中没有任何内容)。
-
无法缓存,太大了。
-
如果您逐行阅读,您当前的逻辑对我来说听起来不错。唯一需要注意的是,如果您需要一次又一次地引用该行,然后将其缓存到内存中,而不是再次读取它。此外,如果您必须一个接一个地处理 n 行 - 只需保持文件句柄打开(这样您就不必再次打开并寻找文件中的相关位置)。
-
只需阅读评论 - 文件很大 - 到底有多大?无论如何,您可以在可以缓存最近使用(或最常用)的行的地方实现缓存。