我希望比较二进制文件中特定位置的值(例如,索引n x i的值,其中i = 0,1,2,3 ...并且n =任意数字,比如说10)。 我想看看这个值是否等于另一个,比如“m”。该值在文件中的位置始终仅为n x i。
我可以想到三种方法:
我维护一个临时变量,它存储n x i的值,我直接使用fseek转到该索引并查看它是否等于m。
我对文件中的m值进行了fseek。
我使用fseek搜索位置0,n,2n,3n,...等中m的值。
我不知道这些操作中的每一项是如何运作的,但其中哪一项在空间和时间方面最有效?
编辑: 这个过程是一个更大的过程的一部分,它有更多的文件,因此时间很重要。 如果除了使用fseek之外还有其他方式,请告诉我们。
任何帮助表示赞赏。谢谢!
答案 0 :(得分:4)
如果您没有预先了解所搜索文件中的值和排序,最快捷的方法就是线性查看文件并比较值。
这可能最好通过重复使用fseek(),但重复调用fseek和read可能比只读取文件的大块并在内存中查看它们要慢 - 因为系统调用有很多开销。
但是,如果您正在对相同的文件进行大量搜索,那么最好建立索引和/或对记录进行排序。一种方法是将数据放入具有内置索引的关系数据库(几乎任何SQL数据库)
编辑:
由于您知道文件已排序,因此您可以使用binary search。