Хорошо, благодаря комментариям, я смог заставить это работать.Это код для использования BinaryWriter / Reader.
Sub createMMF()
Dim mmf As MemoryMappedFile = MemoryMappedFile.CreateNew("testmap", 11)
Dim stream As MemoryMappedViewStream = mmf.CreateViewStream()
Dim writer As BinaryWriter = New BinaryWriter(stream)
writer.Write("hello there")
End Sub
Sub readMMF()
Dim mmf As MemoryMappedFile = MemoryMappedFile.OpenExisting("testmap")
Dim stream As MemoryMappedViewStream = mmf.CreateViewStream()
Dim binaryReader = New BinaryReader(stream)
Dim length = binaryReader.Read() 'gives 11, length of "hello there" string.
Dim text = binaryReader.ReadChars(length)
Debug.Print(text)
End Sub
Кроме того, я протестировал использование пары StreamReader / Writer.Мне пришлось использовать в писателе вызов .flush (), а в методе ReadToEnd по-прежнему было добавлено много нулевых символов.
Sub createMMF()
Dim mmf As MemoryMappedFile = MemoryMappedFile.CreateNew("testmap", 11)
Dim stream As MemoryMappedViewStream = mmf.CreateViewStream()
Dim writer As StreamWriter = New StreamWriter(stream)
writer.Write("hello there")
writer.Flush()
End Sub
Sub readMMF()
Dim mmf As MemoryMappedFile = MemoryMappedFile.OpenExisting("testmap")
Dim stream As MemoryMappedViewStream = mmf.CreateViewStream()
Dim streamReader = New StreamReader(stream)
Dim text = streamReader.ReadToEnd()
Debug.Print(text)
End Sub
Изучив результат, вы можете увидеть символы vbNull.
Одна вещь, которая не имела никакого значения в моем тестировании, - это параметр Capacity метода .CreateNew.Даже если вы введете «1» в длину строки, в обоих примерах это не повлияет.Из моего чтения документов это значение байта должно быть установлено для резервирования памяти, достаточной для задачи.