Язык программирования C#9 и платформа .NET5
Часть 369 из 642 Информация о книге
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.StringBuilderusing (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лишь переопределяет унаследованные члены, чтобы выполнять чтение из блока символьных данных, а не из файла:StringReaderusing (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()предоставляет дополнительные члены, которые позволяют получать или устанавливать объекты производных от Stream типов; кроме того, классBinaryWriterтакже предлагает поддержку произвольного доступа к данным (табл. 20.10).BinaryWriterКласс
дополняет функциональность классаBinaryReaderчленами, описанными в табл. 20.11.BinaryWriterВ показанном далее примере (проект консольного приложения по имени
с операторомBinaryWriterReaderдляusing) в файлSystem.IOзаписываются данные нескольких типов:*.datusing 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";

