【发布时间】:2017-06-13 03:36:31
【问题描述】:
我有由许多 24 字节数据包组成的二进制文件,其中每个数据包中的前 8 个字节代表DateTime 类型的序列化时间戳。数据包都按时间戳升序排列。我想开发一种二进制搜索算法,它选择前 8 个字节,反序列化时间戳,并将其与所需的时间戳进行比较。
目标是在二进制文件中找到表示与所需时间戳匹配的序列化时间戳的起始位置的位置。
编辑
数据在二进制文件中,而不是在数据结构中,因此List<T>.BinarySearch() 对我不起作用。但是是否可以在 Stream 和 CustomComparer 上使用 BinarySearch?
该文件包含数以千万计的此类数据包,因此对文件的简单迭代将非常低效。我考虑使用二分搜索方法。
【问题讨论】:
-
使用结构列表的问题是你必须在搜索之前读取所有数据,可能只是读取流直到你找到你想要的会更有效率
-
@Codor,也许颜色多一点?
-
是的,它是按时间戳排序的
-
我认为二进制搜索的自定义实现是必要的;您可能需要一个可以重新定位阅读光标的流,如here;也许所谓的memory-mapped file 也可以提供帮助。
-
是的,这就是我的想法,在二进制阅读器的基本流中来回移动位置。我只是希望
CustomComparer可以为我节省二进制搜索实现部分。
标签: c# search serialization binary-search