Невозможно записать в MemoryStream с помощью BinaryWriter - PullRequest
3 голосов
/ 30 января 2012

Я пробовал этот код:

byte[] someData = new byte[] { 1, 2, 3, 4 };
MemoryStream stream = new MemoryStream(someData, 1, someData.Length - 1, true);
using (BinaryWriter writer = new BinaryWriter(stream))
{
    writer.Write(1);
}
stream.Dispose();

При каждом запуске выдается исключение NotSupportedException, сообщающее, что поток не может быть записан. Почему это так? Последний параметр инициализации, показанный в строке 2, явно верен, поэтому я должен иметь возможность записи в поток. Это работает, если я не укажу начальный индекс и количество.

Почему это происходит?

Ответы [ 2 ]

9 голосов
/ 30 января 2012

Всегда (почти всегда) создайте поток памяти без параметров в конструкторе:

 using (MemoryStream stream = new MemoryStream())
        {
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                writer.Write(1);
            }
            stream.Flush();
            byte[] bytes = stream.GetBuffer();
            //use it
        }

Этот код отлично работает

3 голосов
/ 30 января 2012

От MSDN :

Инициализирует новый неизменяемый экземпляр класса MemoryStream основанный на указанной области байтового массива, с CanWrite свойство установлено как указано.

BinaryWriter начинает запись в конце потока, поэтому необходимо изменить его размер, чтобы иметь возможность записи, но это не разрешено. Вы можете записывать только в уже выделенные байты потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...