当前位置:  开发笔记 > 人工智能 > 正文

搜索byte []

如何解决《搜索byte[]》经验,为你挑选了0个好方法。

在.NET中搜索字符串是非常好的,但是当你需要搜索的数据不是字符串时你会怎么做?

我有二进制数据通过NetworkStream到达常规块.数据包是二进制的,但它们都以签名字节序​​列开头.我将块累积到一个更大的缓冲区中并查找数据包开始签名.

我真正想要的是byte[]等同于String.IndexOf(ss)方法.我有一种讨厌的感觉,我将不得不用循环和状态机来实现这一点.

有什么建议?给你!


正如所建议的,Array.IndexOf(byte)至少会为我保存一个显式循环.自发布以来,我发现找到第一个签名字节,然后向前探测最后一个签名字节应该匹配的匹配,然后如果它们都匹配,则尝试对字符串的其余部分进行强力比较.这种方法的优点是可以廉价地拒绝错误匹配,并允许我在部分签名等待另一个块时便宜地拒绝.

谷歌透露,上述出色的计划是"KMP"或Knuth-Morris-Pratt算法的退化案例.如果Knuth把自己的名字放在它上面那么光明,那可能是闪电般的闪电,不足之处为什么每当我有一个好主意时唐纳德·克努特在25年前都会想到它?

由于我无法将分数奖励给Donald Knuth,我猜他们会去尼尔森.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有