在Stream中找到给定字节序列开始的位置的最佳方法

在Stream中找到给定字节序列开始的位置的最佳方法,第1张

在Stream中找到给定字节序列开始的位置的最佳方法

我已经找到了解决方案。

我做了一些基准测试与是一个ASCII文件

3.050 KB
38803 lines
。与搜索
byte
array
22bytes
在文件的最后一行,我得到了在有关结果
2.28
秒(在慢/旧机)。

public static long FindPosition(Stream stream, byte[] byteSequence){    if (byteSequence.Length > stream.Length)        return -1;    byte[] buffer = new byte[byteSequence.Length];    using (BufferedStream bufStream = new BufferedStream(stream, byteSequence.Length))    {        int i;        while ((i = bufStream.Read(buffer, 0, byteSequence.Length)) == byteSequence.Length)        { if (byteSequence.SequenceEqual(buffer))     return bufStream.Position - byteSequence.Length; else     bufStream.Position -= byteSequence.Length - PadLeftSequence(buffer, byteSequence);        }    }    return -1;}private static int PadLeftSequence(byte[] bytes, byte[] seqBytes){    int i = 1;    while (i < bytes.Length)    {        int n = bytes.Length - i;        byte[] aux1 = new byte[n];        byte[] aux2 = new byte[n];        Array.Copy(bytes, i, aux1, 0, n);        Array.Copy(seqBytes, aux2, n);        if (aux1.SequenceEqual(aux2)) return i;        i++;    }    return i;}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5643290.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存