我有一个二进制文件。我将它存储在字节数组中。文件大小可以是20MB或更多。然后我想解析或找到文件中的特定值。我通过两种方式做到这一点 - > 1.通过转换char数组中的完整文件。 2.通过十六进制字符串转换完整文件。(我也有十六进制值)
什么是解析完整文件的最佳方法..或者我应该以二进制形式进行。我正在使用vs-2005。
答案 0 :(得分:0)
从内存消耗方面来说,最好能直接解析它。
将它转换为C#中的char数组意味着有效地将其在内存中的大小加倍(假设您将每个byte
转换为char
),而十六进制字符串将至少占用大小的4倍( C#字符是16位unicode字符。)
另一方面,您需要反复进行多次搜索和解析现有数据集,您可以从任何更好地存储的形式中获益。
答案 1 :(得分:0)
什么阻止你在字节[]中进行搜索? 恕我直言,如果您只是搜索指定值的字节或几个连续字节,这是最简单的方法和最有效的方法。
答案 2 :(得分:0)
如果我正确理解了您的问题,您需要找到可以包含大型二进制文件中任何字符的字符串。二进制文件是否包含文本?如果是这样,你知道编码吗?如果是这样,您可以像这样使用StreamReader类:
using (StreamReader sr = new StreamReader("C:\test.dat", System.Text.Encoding.UTF8))
{
string s = sr.ReadLine();
}
在任何情况下,我认为使用某种流访问文件更有效,而不是将其全部加载到内存中。 您可以通过块将其加载到内存中,然后使用一些模式匹配算法(如Knuth-Moris-Pratt或Karp-Rabin)