Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. I. Концепция воспитательной работы.
  2. I.1. Объяснение выбора темы. Цели и задачи работы
  3. III. Процедура защиты выпускной квалификационной работы в Государственной аттестационной комиссии
  4. III.1.1. Что является источником для научной работы?
  5. Package: модуль библиотеки
  6. RAID массивы. История создания RAID массивов. Основные преимущества и недостатки RAID массивов всех уровней. Принципы работы.
  7. Static внутренние классы
  8. VI. Распределение часов курса по темам и видам работы
  9. WiFi стандарты, режимы работы, формат кадра.
  10. А. Рассинхронизация работы IIC

Классы потоков. Класс 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 — представляет продолжительность времени ожидания в операциях вывода. Доступно как для чтения, так и для записи;

– и др.

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

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

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

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

Классы символьных потоков: 1. StreamReader, StreamWriter - Чтение из файла и запись в файл тестовой информации (последовательный доступ). 2. StringReader,

StringWriter - Работа с текстовой информацией в оперативной памяти. Соответствующим хранилищем является строковый буфер, а не физический файл.

Символьные потокиStreamReader и StreamWriter работают с Unicode-символами, поэтому ими удобнее пользоваться для работы с текстовыми файлами, предназначенными для восприятия человеком. Эти потоки являются наследниками базовых абстрактных классов TextWriter и TextReader.

Классы двоичных потоков: BinaryReader, BinaryWritter - Чтение и запись в файл простых встроенных типов (числовых, логических, символьных и т.п.) во внутренней (двоичной) форме представления.

Двоичные файлы хранят данные в том же виде, в котором они представлены в оперативной памяти, то есть во внутреннем представлении. Двоичные файлы не применяются для просмотра человеком, они используются только для программной обработки. Двоичный файл открывается на основе базового потока, в качестве которого чаще всего используется поток FileStream. Входной двоичный поток BinaryReader содержит перегруженные методы чтения для всех простых встроенных типов данных. Выходной поток BinaryWriter поддерживает произвольный доступ, т.е. имеется возможность выполнять запись в произвольную позицию двоичного файла.

Двоичные файлы являются файлами с произвольным доступом, при этом нумерация элементов в двоичном файле ведется с нуля. Произвольный доступ обеспечивает метод Seek. Рассмотрим его синтаксис:

Seek(long newPos, SeekOrigin pos), где параметр newPos определяет новую позицию внутреннего указателя файла в байтах относительно исходной позиции указателя, которая определяется параметром pos. В свою очередь параметр pos должен быть задан одним из значений перечисления SeekOrigin: 1. SeekOrigin.Begin - поиск от начала файла; 2. SeekOrigin.Current - поиск от текущей позиции указателя; 3. SeekOrigin.End - поиск от конца файла.

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




Дата добавления: 2015-09-10; просмотров: 204 | Поможем написать вашу работу | Нарушение авторских прав

Файловый ввод-вывод с ориентацией на символы. Использование класса StreamWriter. Использование класса StreamReader. | Считывание и запись двоичных данных. Класс BinaryWriter. Класс BinaryReader. | Public enum FileAttributes | Основы организации потоков. Потоки и многозадачность. Пространство имен System.Threading. Класс Thread. Создание потока. | Проблемы одновременности и синхронизации потоков. Общий доступ к данным из разных потоков, предотвращение коллизий. | Краткий обзор ADO.NET. Три стороны технологии ADO.NET. Пространство имен System.Data. | Поставщики данных ADO.NET. Поведение объектов подключения. | Объектная модель ADO.NET | Краткий обзор объектов ADO .NET. | События |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав