1

この質問では、

サイズを知らなくても、メモリ マップド ファイルまたはメモリ マップド ビュー アクセサーのすべての内容を読み取る

問題があり(int)stream.Lengthます。正しい長さではなく、使用されている内部バッファのサイズが表示されます! この質問は非常に差し迫っているので、更新する必要があります。

主な質問は次のとおりです。

サイズがわからない場合、MappedViewAccessor を使用して MemoryMappedFile のすべての内容を読み取るには、ReadToEnd または ReadAllBytes に似たものが必要ですが、どうすればよいですか?

私はそれを検索しました、私はこの質問を見ましたが、それは私が探しているものではありません:

.NET でメモリ マップ ファイルからバイトをすばやく読み取るにはどうすればよいですか?

古い答えは次のとおりです。

パブ

public static ReadMMFAllBytes(string fileName)
{
    using (var mmf = MemoryMappedFile.OpenExisting(fileName))
    {
        using (var stream = mmf.CreateViewStream())
        {
            using (BinaryReader binReader = new BinaryReader(stream))
            {
                return binReader.ReadBytes((int)stream.Length));
            }
        }
    }
}

この質問では:

メモリ マップされたファイルの長さ

正確な質問の正確な答えはありません!タイトル以外の質問です。

4

1 に答える 1

0

最良の方法は、生のバイトを単にストリーミングするのではなく、最初にある種の固定長ヘッダーを送信することです。このようにして、最初に読み取る BLOB は一貫した長さになり、可変長の残りを読み取るために必要な情報が得られます。

最も単純なケースでは、最初に長さフィールドが書き込まれ、その後にペイロード (バイト) が続くという単純なレコードになります。必要に応じて、レコード タイプ、バージョンなどのデータをヘッダーに追加できます。

于 2013-03-05T19:28:05.347 に答える