2009-09-30 3 views
1

Я пытаюсь понять использование класса .Net MemoryStream. Мне нужно использовать временные двоичные данные временной динамической длины, когда поток занят. Поэтому я выделяю поток памяти и временно записываю на нее данные. Когда мой поток освобождается, я читаю все данные из memystream и записываю данные на него. Я делаю это, установив указатель положения на 0Извлечение данных из потока памяти

i.e mDataBuffer.Position = 0;

Однако кажется, что класс memystream не отбрасывает данные после его считывания. Поэтому в следующий раз я получу те же данные, что и раньше. Для того, чтобы подтвердить, я написал этот пример программу

 MemoryStream ms = new MemoryStream(); 
     ms.WriteByte((byte)1); 
     ms.Position = 0; 
     Console.WriteLine(ms.ReadByte()); 
     ms.WriteByte((byte)4); 
     ms.Position = 0; 
     Console.WriteLine(ms.ReadByte()); 

и к моему удивлению, выход был (1,1), хотя я ожидал, что выход (1,4).

Я действительно озадачен этим поведением memystream. Может кто-нибудь пролить свет. Также, если это нормальное поведение, то как я могу удалить прошлые данные из потока.

Спасибо заранее, Vaibhav

ответ

4

Ваш код может быть переведен на это: * Создать объект * Запись 1 в положении 0 * Читайте в положении 0 и выход (1) * Запись 4 в положении 1 * Чтение в позиции 0 и вывода (1)

Вы можете исправить это, вставив ms.Position = 0 над строкой ms.writebyte ((byte) 4).

Смежные вопросы