读取内存映射文件或知道其大小以正确读取它

时间:2013-03-05 16:32:51

标签: c# .net ipc memory-mapped-files

在这个问题中,

Read all contents of memory mapped file or Memory Mapped View Accessor without knowing the size of it

有一个问题,(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));
            }
        }
    }
}

在这个问题中:

Memory Mapped File Length

确切的问题没有确切的答案!问题不仅仅是标题。

1 个答案:

答案 0 :(得分:1)

最好的方法是首先发送一个固定长度的排序头,而不是仅仅传输原始字节。这样,您读取的第一个blob是一致的长度,它为您提供了读取可变长度余数所需的信息。

在最简单的情况下,您的记录可以像首先写入长度字段一样简单,然后是有效负载(您的字节)。根据您的需要,您可以将数据添加到标题中,如记录类型,版本等。