1

在这个问题中,

在不知道大小的情况下读取内存映射文件或内存映射视图访问器的所有内容

有一个问题,(int)stream.Length没有给我正确的长度,而是给出了使用的内部缓冲区的大小!我需要刷新这个问题,因为它非常紧迫。

主要问题是:

如果我不知道它的大小,我需要类似于 ReadToEnd 或 ReadAllBytes 的东西来使用 MappedViewAccessor 读取 MemoryMappedFile 的所有内容,我该怎么做?

我已经搜索过了,我看到了这个问题,但这不是我要找的东西:

如何从 .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 回答