Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по C_1.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.11 Mб
Скачать
  1. Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.

Классы потоков. В C# , в пространстве имен System.IO, определены как байтовые, так и символьные классы потоков. Чтобы можно было использовать эти классы, в начало программы следует включить инструкцию using System.IO;. Для ввода и вывода на консоль эту инструкцию задавать не нужно, так как класс Console определен в пространстве имен System (инструкция using System;).

Классы библиотеки .NET для работы с потоками

Классы библиотеки позволяют работать в различных режимах с файлами, каталогами и областями оперативной памяти. Выполнять обмен с внешними устройствами можно на уровне:

  • двоичного представления данных (BinaryReader, BinaryWritter);

  • байтов (FileStream);

  • текста, т.е. символов (StreamReader, StreamWriter).

Двоичные и байтовые потоки хранят данные в том же виде, в котором они представлены в оперативной памяти, т.е. при обмене с файлом происходит побитовое копирование информации.

Класс Stream. Центральную часть потоковой C#-системы занимает класс System.IO.Stream. Класс Stream представляет байтовый поток и является базовым абстрактным классом для всех остальных потоковых классов. В классе Stream определяется ряд операций со стандартными потоками, представленных соответствующими методами. Рассмотрим ряд наиболее часто используемых методов:

-void Close() — завершает текущий поток и освобождает все связанные с текущим потоком ресурсы (например, дескриптор файла);

-void Flush( ) — выводит содержимое буфера на физическое устройство, а затем очищает буфер;

-int ReadByte( ) — возвращает целочисленное представление следующего байта, доступного для ввода из потока. При обнаружении конца файла возвращает значение -1;

-int Read (byte [ ] buffer, int offset, int count) — делает попытку прочитать count байтов в массив buffer, начиная с элемента buffer [offset]. Возвращает количество успешно прочитанных байтов;

-long Seek (long offset, SeekOrigin origin) — устанавливает текущее положение в потоке по указанному смещению offset относительно заданного начала отсчета origin. Возвращает новое положение в потоке;

-void WriteByte (byte value) —записывает один байт в поток вывода;

-void Write (byte [ ] buffer, int offset, int count) — выводит подмножество count байтов из массива buffer, начиная с элемента buffer[offset]. Возвращает количество выведенных байтов.

В общем случае при возникновении ошибки ввода-вывода методы генерируют исключение IOException.

Следует заметить, что в классе Stream определены методы для ввода (или чтения) и вывода (или записи) данных. Но не все потоки поддерживают обе эти операции, поскольку поток можно открывать только для чтения или только для записи. Кроме того, не все потоки поддерживают запрос текущего положения в потоке с помощью метода Seek(). Для того чтобы определить возможности потока, придется воспользоваться одним, а то и несколькими свойствами класса Stream:

-bool CanWrite — принимает значение true, если в поток можно записывать данные. Доступно только для чтения;

-long Length — содержит длину потока. Доступно только для чтения;

-long Position — представляет текущее положение в потоке. Доступно как для чтения, так и для записи;

-int ReadTimeout — представляет продолжительность времени ожидания в операциях ввода. Доступно как для чтения, так и для записи;

-int WriteTimeout — представляет продолжительность времени ожидания в операциях вывода. Доступно как для чтения, так и для записи;

1.4. Классы байтовых потоков. Производными от класса Stream являются несколько конкретных классов байтовых потоков. Эти классы определены в пространстве System.IO и перечислены ниже:

Класс потока

Описание

BufferedStream

Временное хранение потока байтов (буферизация). Буферизация, как правило, повышает

производительность.

FileStream

Произвольный (прямой) доступ к файлу, представленному как поток байтов.

MemoryStream

Произвольный (прямой) доступ к потоку байтов в оперативной памяти