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

При создании полноценных приложений исключительно важна возможность сохранения информации между сеансами доступа пользователя.

Многие приложения хранят данные и обращаются с ними как с неделимыми элементами информации. Когда приложению необходима переменная или объект, оно называет нужное имя и получает то, что хочет. Однако при записи данных в файл, или передаче их по локальной сети или по Интернет, они должны быть организованы в потоки данных (streams). Внутри потока данные следуют друг за другом, как пузырьки воздуха в потоке воды.

Конечной точкой потока является какое-то запоминающее устройство. Оно служит источником данных, как озеро, из которого вытекает река. В типичном случае в качестве такого устройства выступает файл, но это может быть и локальная сеть, и веб-соединение. Поток данных, направленный в файл или из файла, ничем не отличается от потока данных, идущего по сети. Итак, поток (stream) - это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. С помощью потока можно читать данные из различных источников (клавиатура, файл) и записывать в различные источники (принтер, экран, файл). Поток обеспечивает общую возможность взаимодействия с последовательностями байтов, независимо от того, на устройстве какого вида (в файле, сетевом соединении, принтере и т.п.) они хранятся или отображаются. Потоки обеспечивают надежную работу, как со стандартными типами данных, так и с определенными пользователем типами данных.

C#-система ввода-вывода построена на иерархии классов, определенной в пространстве имен System.IO. Несмотря на то, что потоки связываются с различными физическими устройствами, характер поведения всех потоков одинаков. Поэтому классы и методы ввода-вывода можно применить ко многим типам устройств.

На самом низком уровне C#-система ввода-вывода оперируют байтами. Это объясняется тем, что многие устройства при выполнении операций ввода-вывода ориентированы на байты. Однако для человека привычнее иметь дело с символами. Вспомним, что в C# тип char – это 16-разрядный тип, а тип byte – 8-разрядный. Преобразование типа char в byte для Unicode –символов, которым необходимы два байта, не сработает. Таким образом, байтовые потоки не вполне подходят для обработки текстового (ориентированного на символы) ввода-вывода. Поэтому разработаны символьные потоки, которые фактически представляют собой оболочки, выполняющие преобразование байтовых потоков в символьные и наоборот (byte -> char и char -> byte).

Любое приложение, использующее пространство имен System (включена инструкция using System;), может пользоваться тремя стандартными (встроенными) потоками, доступ к которым осуществляется через следующие свойства классов TextWriter и TextReader:

Console.In ­– относится к стандартному входному потоку (по умолчанию это клавиатура). Например, при вызове метода Console.ReadLine() информация автоматически передается в этот поток;

Console.Out ­– относится к стандартному выходному потоку (по умолчанию это консоль). Например, при вызове метода Console.WriteLine() информация автоматически передается в этот поток;

Console.Error – относится к ошибкам в стандартном потоке, источником которого по умолчанию является консоль.

Эти потоки могут быть перенаправлены на любое совместимое устройство ввода-вывода. Стандартные потоки являются символьными, т.е. они считывают и записывают символы.