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("Don't forget Mother's Day this year...");
<b> // Получить копию содержимого (хранящегося в строке) и вывести на консоль.</b>
Console.WriteLine("Contents of StringWriter:\n{0}", strWriter);
}
Console.ReadLine();
Классы
StringWriter
и
StreamWriter
порождены от одного и того же базового класса (
TextWriter
), поэтому логика записи похожа. Тем не менее, с учетом природы
StringWriter
вы должны также знать, что данный класс позволяет применять метод
GetStringBuilder()
для извлечения объекта
System.Text.StringBuilder
:
using (StringWriter strWriter = new StringWriter())
{
strWriter.WriteLine("Don't forget Mother's Day this year...");
Console.WriteLine("Contents of StringWriter:\n{0}", strWriter);
<b> // Получить внутренний объект StringBuilder.</b>
StringBuilder sb = strWriter.GetStringBuilder();
sb.Insert(0, "Hey!! ");
Console.WriteLine("-> {0}", sb.ToString());
sb.Remove(0, "Hey!! ".Length);
Console.WriteLine("-> {0}", sb.ToString());
}
Когда необходимо прочитать из потока строковые данные, можно использовать соответствующий тип
StringReader
, который (вполне ожидаемо) функционирует идентично
StreamReader
. Фактически класс
StringReader
лишь переопределяет унаследованные члены, чтобы выполнять чтение из блока символьных данных, а не из файла:
using (StringWriter strWriter = new StringWriter())
{
strWriter.WriteLine("Don't forget Mother's Day this year...");
Console.WriteLine("Contents of StringWriter:\n{0}", 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).
Класс
BinaryReader
дополняет функциональность класса
BinaryWriter
членами, описанными в табл. 20.11.
В показанном далее примере (проект консольного приложения по имени
BinaryWriterReader
с оператором
using
для
System.IO
) в файл
*.dat
записываются данные нескольких типов:
using System;
using System.IO;
Console.WriteLine("***** Fun with Binary Writers / Readers *****\n");
<b>// Открыть средство двоичной записи в файл.</b>
FileInfo f = new FileInfo("BinFile.dat");
using(BinaryWriter bw = new BinaryWriter(f.OpenWrite()))
{
<b> // Вывести на консоль тип BaseStream</b>
<b> // (System.IO. Filestream в этом случае).</b>
Console.WriteLine("Base stream is: {0}", bw.BaseStream);
<b> // Создать некоторые данные для сохранения в файле.</b>
double aDouble = 1234.67;
int anInt = 34567;
string aString = "A, B, C";