English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Основы

C# Уровень продвинутых знаний

C# ООП (Объектно-ориентированное программирование)

потоки (Stream) в C#

C# включает в себя следующие стандартные классы IO (вход/выход), которые можно читать/записывать из различных источников (например, файлов, памяти, сети, изолированного хранилища и т.д.).

Поток (Stream): System.IO.Stream Это абстрактный класс, который предоставляет стандартные методы для передачи байтов (чтение, запись и т.д.) в источник. Как и класс-оболочка, передающий байты. Классы, которые должны читать/записывать байты из определенного источника, должны реализовать класс Stream.

Следующие классы наследуют класс Stream, чтобы предоставлять функции чтения/записи байт из конкретных источников:

FileStream:FileStream читает байты из физического файла или записывает байты в физический файл, независимо от того, это .txt, .exe, .jpg или любое другое файл.

MemoryStream: MemoryStream читает или записывает байты, хранящиеся в памяти.

BufferedStream: BufferedStream читает или записывает байты из других потоков, чтобы повысить производительность некоторых операций ввода/вывода.

NetworkStream: NetworkStream читает или записывает байты из сетевых сокетов.

PipeStream: PipeStream читает или записывает байты из других процессов.

CryptoStream: CryptoStream используется для подключения данных потоков к криптографическим преобразованиям.

На рисунке ниже показана иерархия классов потоков:

Иерархия классов потоков

Читатели и записыватели потоков

StreamReaderStreamReader - это вспомогательный класс, который используется для чтения символов из Stream, преобразовывая байты в символы с использованием кодирования. Он может использоваться для чтения строк из различных потоков (например, FileStream, MemoryStream и т.д.).

StreamWriterStreamWriter - это вспомогательный класс, который используется для записи строк в Stream, преобразовывая символы в байты. Он может использоваться для записи строк в различные потоки, такие как FileStream, MemoryStream и т.д.

BinaryReaderBinaryReader - это вспомогательный класс, предназначенный для чтения исходных данных из байт.

BinaryWriterBinaryWriter используется для записи исходных типов в двоичном формате.

Стream I/O

На рисунке показано, что FileStream читает байты из физического файла, а затем StreamReader читает строки, преобразовывая эти байты в строки. Точно так же StreamWriter получает строку и преобразует ее в байты, затем写入 в FileStream, а затем FileStream записывает байты в физический файл. Таким образом, FileStream обрабатывает байты, а StreamReader и StreamWriter обрабатывают строки.

 Основные моменты, которые нужно запомнить

  1. Stream - это абстрактный класс, предназначенный для передачи байтов из различных источников. Это базовый класс для всех других классов, которые читают/записывают байты в различные источники.

  2. Класс FileStream предоставляет функциональность для чтения и записи байт в физические файлы.

  3. Классы читателей и писателей предоставляют функциональность для чтения байт из потоков классов (FileStream, MemoryStream и т.д.) и преобразования байт в соответствующий кодировке.

  4. StreamReader предоставляет вспомогательный метод для чтения строк из FileStream, преобразуя байты в строки. StreamWriter предоставляет вспомогательный метод для записи строк в FileStream, преобразуя строки в байты.

В следующей части вы узнаете, как читать/записывать в файловую систему.