Разобрать код, в котором создается поток типа MemoryStream с помощью конструктора - C#
Формулировка задачи:
using System;
using System.IO;
class MemStrDemo {
static void Main() {
byte[] storage = new byte[255];
// Create a memory-based stream.
MemoryStream memstrm = new MemoryStream(storage);
// Wrap memstrm in a reader and a writer.
StreamWriter memwtr = new StreamWriter(memstrm);
StreamReader memrdr = new StreamReader(memstrm);
try {
// Write to storage, through memwtr.
for(int i=0; i < 10; i++)
memwtr.WriteLine("byte [" + i + "]: " + i);
// Put a period at the end.
memwtr.WriteLine(".");
memwtr.Flush();
Console.WriteLine("Reading from storage directly: ");
// Display contents of storage directly.
foreach(char ch in storage) {
if (ch == '.') break;
Console.Write(ch);
}
Console.WriteLine("\nReading through memrdr: ");
// Read from memstrm using the stream reader.
memstrm.Seek(0, SeekOrigin.Begin); // reset file pointer
string str = memrdr.ReadLine();
while(str != null) {
str = memrdr.ReadLine();
if(str[0] == '.') break;
Console.WriteLine(str);
}
} catch(IOException exc) {
Console.WriteLine("I/O Error\n" + exc.Message);
} finally {
// Release reader and writer resources.
memwtr.Close();
memrdr.Close();
}
}
}memwtr.WriteLine("byte [" + i + "]: " + i)
. Правильно ли я понимаю, что здесь каждый элемент массива storage - это минимальная единица хранения информации? Например, если вывести storage[0] - будет b, storage[1] -y, storage[2] - t и т.д. Вопрос только в том как метод WriteLine "ложится" на этот массив? Строка разбивается на отдельный символ, затем он преобразуется в байт, и потом уже присваивается каждому элементу массива ?(причем последний символ - это '\n'?) 2.memwtr.Flush(); - это что-то вроде "записать"? 3. Дальше, еще хуже... почему тутforeach(char ch in storage) { if (ch == '.') break; Console.Write(ch); }
используется переменная типа char для перебора значений storage, когда у нас массив типа byte ? 4. Теперь начинается ввод данных.string str = memrdr.ReadLine();
Опять-таки здесь метод ReadLine() будет считывать каждый байт (он же элемент массив) в отдельности, затем преобразовывать в символ и "класть" в строку str? (пока не встретить '\n')? Надеюсь не сумбурно получилось Спасибо.Решение задачи: «Разобрать код, в котором создается поток типа MemoryStream с помощью конструктора»
textual
Листинг программы
memwtr.WriteLine("byte [{0}]: {1}", i, i);