1

バイナリファイルがあります。私はそれをバイト配列に格納しました。ファイル サイズは 20MB 以上になる場合があります。次に、ファイル内の特定の値を解析または検索します。私は2つの方法でそれをやっています-> 1.完全なファイルをchar配列に変換することによって。2.ファイル全体を16進文字列に変換することにより(16進値もあります)

ファイル全体を解析する最良の方法は何ですか..またはバイナリ形式で行うべきですか. 私はvs-2005を使用しています。

4

3 に答える 3

0

メモリ消費の観点からは、オンザフライで直接解析できることが最善です。

C# で char 配列に変換すると、メモリ内のサイズが実質的に 2 倍になりますが (それぞれbyteを に変換すると仮定char)、16 進文字列は少なくとも 4 倍のサイズになります (C# char は 16 ビットの Unicode 文字です)。

一方、既存のデータ セットを繰り返し解析して多くの検索を行う必要がある場合は、必要に応じて任意の形式でデータを保存することでメリットが得られる場合があります。

于 2009-12-01T07:13:23.363 に答える
0

バイト[]で検索するのを妨げているのは何ですか? IMHO、指定された値のバイト、または連続する複数のバイトを単に検索している場合、これが最も簡単で効率的な方法です。

于 2009-12-01T07:14:23.047 に答える
0

私があなたの質問を正しく理解していれば、大きなバイナリ ファイル内の任意の文字を含む文字列を見つける必要があります。バイナリ ファイルにテキストが含まれていますか? もしそうなら、あなたはエンコーディングを知っていますか?その場合、次のように StreamReader クラスを使用できます。

using (StreamReader sr = new StreamReader("C:\test.dat", System.Text.Encoding.UTF8))
{
    string s = sr.ReadLine();
}

いずれにせよ、すべてをメモリにロードするのではなく、ファイルへの何らかのストリームアクセスを使用する方がはるかに効率的だと思います。チャンクごとにメモリにロードし、パターン マッチング アルゴリズム (Knuth-Moris-Pratt や Karp-Rabin など) を使用できます。

于 2009-12-01T07:38:50.003 に答える