- •1 Классы потоков
- •1.3 Символьные классы потоков
- •2.1.2 Запись данных в консольный входной поток
- •2.2 Класс FileStream. Файловый побайтовой ввод-вывод
- •2.2.1 Открытие и закрытие файла
- •2.2.2 Считывание байт из объекта класса FileStream..
- •2.3 Файловый ввод-вывод с ориентацией на символы
- •2.3.1 Использование класса StreamWriter
- •2.3.2 Использование класса StreamReader
- •2.4 Перенаправление стандартных потоков
- •2.5 Считывание и запись двоичных данных
- •2.5.1 Класс BinaryWriter
- •Класс BinaryReader
- •Применение двоичного ввода-вывода
- •2.7 Считывание входных данных из массива и запись их в массив
- •2.9 Преобразование числовых строк во внутреннее представление
2.7 Считывание входных данных из массива и запись их в массив
В этом случае для операций ввода-вывода используются массивы байт. Выполняется это с помощью класса MemoryStream, конструктор которого имеет вид MemoryStream(byte[] buf) где
- buf –массив байтов, используемый в операциях ввода-вывода как источник/приемник информации. Размер buf должен обеспечивать размещение в нем размещаемых байт.
Ниже демонстрируется пример программы.
№ 13
// Работа с массивом байт - класс MemoryStream
using System;
using System.IO;
class MemStr {
public static void Main() {
byte[] storage = new byte[255];
// Создаем поток с ориентацией на память
MemoryStream memstrm = new MemoryStream(storage);
// Помещаем объект memstrm в оболочки StreamWriter
// и StreamReader
StreamWriter memwtr = new StreamWriter(memstrm);
StreamReader memrdr = new StreamReader(memstrm);
//Записываем данные в память с помощью объекта memwtr.
for(int i=0; i < 10; i++)
memwtr.WriteLine(" byte[" + i + "]: " + i);
// Ставим в конце точку.
memwtr.Write('.');
memwtr.Flush();
Console.WriteLine("\n Считываем данные прямо из массива storage: ");
//Отображаем напрямую содержимое памяти.
foreach(char ch in storage) {
if(ch == '.')break;
Console.Write(ch);
}
Console.WriteLine(
"\n Считываем данные посредством объекта memrdr: ");
// Считывем данные из объекта memstrm, используя
// средство чтения потоков.
memstrm.Seek(0, SeekOrigin.Begin); // Установка
// указателя позиции в начало потока.
string str = memrdr.ReadLine();
while(str != null) {
str = memrdr.ReadLine();
if(str.CompareTo(".") == 0)break;
Console.WriteLine(str);
} Console.WriteLine("\n\n\n ");
}
}
Рис 13 Результаты использования массива байтов в операциях ввода-вывода
2.8 Применение классов StringReader и StringWriter (строковые массивы)
Применение вместо байтовых массивов строковых позволяют применять известные методы ReadLine() и WriteLine().
Используются конструкторы StringReader(string str) и StringWriter(). Здесь str – строка, из которой должны считываться данные. Содержимое строки можно получить с помощью метода ToString().
Ниже приводится пример применения классов SrtingReader и StringWriter.
№ 14
// Применение StringReader и StringWriter
using System;
using System.IO;
class StrRdr
{
public static void Main()
{
// Создаем объект класса StringWriter
StringWriter strwtr = new StringWriter();
// Записываем данные в StringWriter-объект.
Console.WriteLine(" ");
for (int i = 0; i < 10; i++)
strwtr.WriteLine(" Значение i равно: " + i);
// Создаем объект класса StringReader.
StringReader strrdr = new StringReader(strwtr.ToString());
// Теперь считываем данные из StringReader-объекта
string str = strrdr.ReadLine();
while (str != null)
{
str = strrdr.ReadLine();
Console.WriteLine(str);
}
Console.WriteLine("\n\n\n ");
}
}
Рис14 Результаты применения строковых классов StringReader и StringWriter