Литмир - Электронная Библиотека
A
A

using System;

using System.IO;

using System.Text;

Console.WriteLine("***** Fun with StringWriter/StringReader *****\n");

<b>// Создать объект StringWriter и записать символьные данные в память.</b>

using(StringWriter strWriter = new StringWriter())

{

  strWriter.WriteLine(&quot;Don't forget Mother's Day this year...&quot;);

<b>  // Получить копию содержимого (хранящегося в строке) и вывести на консоль.</b>

  Console.WriteLine(&quot;Contents of StringWriter:\n{0}&quot;, strWriter);

}

Console.ReadLine();

Классы

StringWriter
и
StreamWriter
порождены от одного и того же базового класса (
TextWriter
), поэтому логика записи похожа. Тем не менее, с учетом природы
StringWriter
вы должны также знать, что данный класс позволяет применять метод
GetStringBuilder()
для извлечения объекта
System.Text.StringBuilder
:

using (StringWriter strWriter = new StringWriter())

{

  strWriter.WriteLine(&quot;Don't forget Mother's Day this year...&quot;);

  Console.WriteLine(&quot;Contents of StringWriter:\n{0}&quot;, strWriter);

<b>  // Получить внутренний объект StringBuilder.</b>

  StringBuilder sb = strWriter.GetStringBuilder();

  sb.Insert(0, &quot;Hey!! &quot;);

  Console.WriteLine(&quot;-&gt; {0}&quot;, sb.ToString());

  sb.Remove(0, &quot;Hey!! &quot;.Length);

  Console.WriteLine(&quot;-&gt; {0}&quot;, sb.ToString());

}

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

StringReader
, который (вполне ожидаемо) функционирует идентично
StreamReader
. Фактически класс
StringReader
лишь переопределяет унаследованные члены, чтобы выполнять чтение из блока символьных данных, а не из файла:

using (StringWriter strWriter = new StringWriter())

{

  strWriter.WriteLine(&quot;Don't forget Mother's Day this year...&quot;);

  Console.WriteLine(&quot;Contents of StringWriter:\n{0}&quot;, strWriter);

<b>  // Читать данные из объекта StringWriter.</b>

  using (StringReader strReader = new StringReader(strWriter.ToString()))

  {

    string input = null;

    while ((input = strReader.ReadLine()) != null)

    {

      Console.WriteLine(input);

    }

  }

}

Работа с типами BinaryWriter и BinaryReader

Последним набором классов средств чтения и записи, которые рассматриваются в настоящем разделе, являются

BinaryWriter
и
BinaryReader
; они оба унаследованы прямо от
System.Object
. Типы
BinaryWriter
и
BinaryReader
позволяют читать и записывать в поток дискретные типы данных в компактном двоичном формате. В классе
BinaryWriter
определен многократно перегруженный метод
Write()
, предназначенный для помещения некоторого типа данных в поток. Помимо
Write()
класс
BinaryWriter
предоставляет дополнительные члены, которые позволяют получать или устанавливать объекты производных от Stream типов; кроме того, класс
BinaryWriter
также предлагает поддержку произвольного доступа к данным (табл. 20.10).

Язык программирования C#9 и платформа .NET5 - _136.png

Класс

BinaryReader
дополняет функциональность класса
BinaryWriter
членами, описанными в табл. 20.11.

Язык программирования C#9 и платформа .NET5 - _137.png

В показанном далее примере (проект консольного приложения по имени

BinaryWriterReader
с оператором
using
для
System.IO
) в файл
*.dat
записываются данные нескольких типов:

using System;

using System.IO;

Console.WriteLine(&quot;***** Fun with Binary Writers / Readers *****\n&quot;);

<b>// Открыть средство двоичной записи в файл.</b>

FileInfo f = new FileInfo(&quot;BinFile.dat&quot;);

using(BinaryWriter bw = new BinaryWriter(f.OpenWrite()))

{

<b>  // Вывести на консоль тип BaseStream</b>

<b>  // (System.IO. Filestream в этом случае).</b>

  Console.WriteLine(&quot;Base stream is: {0}&quot;, bw.BaseStream);

<b>  // Создать некоторые данные для сохранения в файле.</b>

  double aDouble = 1234.67;

  int anInt = 34567;

  string aString = &quot;A, B, C&quot;;

369
{"b":"847442","o":1}