- •Организация c#-системы ввода-вывода: байтовые и символьные потоки. Встроенные потоки.
- •Классы потоков. Класс Stream. Классы байтовых потоков. Классы символьных потоков. Классы двоичных потоков.
- •1.5. Классы символьных потоков:
- •1.6. Классы двоичных потоков:
- •Класс FileStream и файловый ввод-вывод на побайтовой основе. Открытие и закрытие файла. Запись данных в файл. Считывание байтов из объекта класса FileStream.
- •Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader.
- •Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader.
- •Наиболее важные методы выходного потока BinaryWriter:
- •Навигация по файловой системе: классы для работы с файловой системой.
- •Получение сведений о файле; копирование файлов; перечисление файлов в папке; изменение расширения файлов.
- •5.3. Изменение расширения файлов
- •Основы организации потоков. Потоки и многозадачность.
- •Пространство имен System.Threading. Класс Thread. Создание потока.
- •Создание потока. Чтобы создать поток, необходимо создать объект типа Thread. В классе Thread определен следующий конструктор: public Thread(ThreadStart entryPoint),
- •Приоритет потоков. Класс Thead поддерживает установку и получение приоритета потока. Для этого используется перечисление ThreadPriority. Его значения:
- •Использование нескольких потоков. Планирование потоков, приоритеты потоков. Можно создавать в программе несколько дочерних потоков.
- •Создать статический метод SimpleWork() в классе MultiThread (перед методом Main), который выводит на экран Id-номер каждого потока:
- •Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий.
- •Синхронизация доступа к общим данным с помощью блокировок.
- •2) Выполнить блокировку операторов в ранее используемых методах SimpleWork и run:
- •Управление временем существования потоков.
- •Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.
- •2.2 Три стороны технологии ado.Net
- •15.Поставщики данных ado.Net. Поведение объектов подключения.
- •Объектная модель ado.Net.
- •Создание соединения с источником данных. Члены типа dbConnection. Обработка исключений при работе с ms sql
- •Конструкторы
- •Свойства
- •События
- •Конструкторы
- •Свойства
- •Выборка, добавление, удаление и обновление данных с помощью sql-запросов на подсоединенном уровне.
- •Вывод информации с использованием объекта чтения данных: создание SqlDataReader; чтение данных из DataReader; чтение полей из текущей записи; закрытие DataReader.
- •Сравнение DataReader и DataSet:
- •Чтение данных из DataReader:
- •Организация хранения данных. Объект DataSet.
- •Строки: объект DataRow.
- •Конструкторы:
- •Свойства
- •Передача данных между источником данных и объектом DataSet. Обновление базы данных с помощью адаптера данных.
Классы потоков. Класс 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 |
Произвольный (прямой) доступ к потоку байтов в оперативной памяти |
