Разобрать код, в котором создается поток типа 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(); 
    } 
  }   
}
В данной программе создается поток типа MemoryStream с помощью конструктора, где указывается целевой массив, как основной источник получения\записи информации. Есть несколько неясных моментов: 1. В первом цикле, где мы записываем данные

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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы