byte[] storage = new byte[255];
// Создать запоминающий поток.
MemoryStream memsttm = new MemoryStream(storage);
// чтения и записи данных в потоки.
StreamWriter memwtr = new StreamWriter(memstrm);
StreamReader memrdr = new StreamReader(memstrm);
try {
// Записать данные в память, используя объект memwtr. for(int i=0; i < 10; i++)
memwtr.WriteLine("byte [" + i + "]: " + i);
// Поставить в конце точку, memwtr.WriteLine(".");
memwtr.Flush ;
Console.WriteLine("Чтение прямо из массива storage: ");
// Отобразить содержимое массива storage непосредственно. foreach(char ch in storage) { if (ch == '.') break;
Console.Write(ch);
}
Console.WriteLine("ХпЧтение из потока с помощью объекта memrdr: ");
// Читать из объекта memstrm средствами ввода данных из потока, memstrm.Seek(0, SeekOrigin.Begin); // -установить указатель файла
// в исходное положение
string str = memrdr.ReadLine ; while(str != null) {
str = memrdr.ReadLine ; if(str[0] == '.') break;
Console.WriteLine(str) ;
}
} catch(IOException exc) {
Console.WriteLine("Ошибка ввода-вывода\п" + exc.Message);
} finally {
// Освободить ресурсы считывающего и записывающего потоков, memwtr.Close; memrdr.Close ;
}
}
}
Вот к какому результату приводит выполнение этой программы.
Чтение прямо из массива storage:
byte [0]: 0
byte [1]: 1
byte [2]: 2
byte [3]: 3
byte [4] : 4
byte [5] : 5
byte [6]: 6
byte [7]: 7
byte [8] : 8
byte [9]: 9
Чтение из потока с помощью объекта memrdr:
byte [1]: 1
byte [2]: 2
byte [3]: 3
byte [4]: 4
byte [5]: 5
byte [6]: 6
byte [7]: 7
byte [8]: 8
byte [9]: 9
В этой программе сначала создается массив байтов, называемыйstorage.Затем этот массив используется в качестве основной памяти для объектаmemstrmклассаMemoryStream.Из объектаmemstrm,в свою очередь, создаются объектыmemrdrклассаStreamReaderиmemwtrклассаStreamWriter.С помощью объектаmemwtrвыводимые данные записываются в запоминающий поток. Обратите внимание на то, что после записи выводимых данных для объектаmemwtrвызывается методFlush . Это необходимо для того, чтобы содержимое буфера этого объекта записывалось непосредственно в базовый массив. Далее содержимое базового массива байтов отображается вручную в циклеfor each.После этого указатель файла устанавливается с помощью методаSeek в начало запоминающего потока, из которого затем вводятся данные с помощью объекта потокаmemrdr.