Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Ввод/вывод. Потоки (stream)




Ввод/вывод

Введение

Данные, используемые в программе на языке Java, должны откуда-то поступать. Наиболее часто они поступают из какого-либо внешнего источника данных. Существует множество источников данных различного типа, включая базы данных, прямую передачу байтов через сокет и файлы. Язык Java предоставляет множество инструментов, которые вы можете использовать для получения информации из внешних источников. Эти инструменты расположены главным образом в пакете java. io.

Среди всех доступных источников данных, наиболее распространены файлы, и часто они наиболее удобны. Умение использовать доступные API языка Java для взаимодействия с файлами является фундаментальным для программиста.

Язык Java предоставляет класс-конверт (File) для файла в вашей операционной системе. Для чтения этого файла вы должны использовать потоки, преобразующие принимаемые байты в типы языка Java. В данном разделе мы погорим обо всех объектах, которые обычно используются для чтения файлов.

Файлы

Класс File определяет ресурс в вашей файловой системе. Он является головной болью для программиста, особенно при тестировании, но это реальность, с которой Java-программистам приходится иметь дело.

Вот как создается экземпляр File:

File aFile = new File(" temp. txt" );

При этом создается File, путь которого равен temp. txt в текущем каталоге. Можно создать File с любой желаемой строкой пути, если путь корректен для системы. Обратите внимание на то, что наличие этого объекта File не означает, что связанный с ним файл существует в файловой системе на ожидаемом месте. Наш объект только представляет действительный файл, который может быть там, а может и не быть. Если этот файл не существует, мы не узнаем об этой проблеме, пока не попытаемся выполнить операцию чтения или записи. Это немного неприятно, но имеет смысл. Например, мы можем узнать о существовании файла, вызвав следующую функцию:

aFile. exists();

Если он не существует, мы можем создать его:

aFile. createNewFile();

Используя другие методы File, мы можем также удалять файлы, создавать каталоги, определять, является ли ресурс файловой системы каталогом или файлом и т. д. Однако реальные действия происходят при выполнении операций чтения и записи. Для работы с ними мы должны немного понимать, что такое потоки.

Потоки (stream)

Обращаться к файлам в файловой системе можно при помощи потоков. На самом низком уровне потоки позволяют программе принимать байты из источника и/или передавать их в назначение. Некоторые потоки обрабатывают все виды 16-битных символов (типы Reader и Writer). Другие обрабатывают только 8-битные байты (типы InputStream и OutputStream). В этих иерархиях есть несколько разновидностей потоков (все находятся в пакете java. io). На самом высоком уровне абстракции существуют символьные и байтовые потоки.

Байтовые потоки читают (InputStream и его подклассы) и записывают (OutputStream и его подклассы) 8-битные байты. Другими словами, байтовые потоки могли бы рассматриваться как более необработанный (raw) тип потока. Теперь легко понять, почему в руководстве Java. sun. com по основным классам языка Java (см. раздел " Ресурсы" ) говорится, что байтовые потоки обычно используются для двоичных данных, таких как изображения. Вот избранный список байтовых потоков:

Потоки Использование
FileInputStream FileOutputStream Чтение байтов из файла, запись байтов в файл.
ByteArrayInputStream ByteArrayOutputStream Чтение байтов из массива, находящегося в памяти, и запись байтов в массив, находящийся в памяти.

Символьный потоки читают (Reader и его подклассы) и записывают (Writer и его подклассы) 16-битные символы. Подклассы либо читают данные из источников данных, либо записывают их, либо обрабатывают передающиеся байты. Вот избранный список символьных потоков:

Потоки Использование
StringReader StringWriter Эти потоки читают символы из объектов String, находящихся в памяти, и записывают символы в них.
InputStreamReader InputStreamWriter (и подклассы FileReader FileWriter) Мост между байтовыми потоками и символьными потоками. Разновидности Reader читают байты из байтового потока и преобразовывают их в символы. Разновидности Writer преобразовывают символы в байты и помещают их в байтовые потоки.
BufferedReader и BufferedWriter Буферизируют данные во время чтения или записи другого потока, что повышает эффективность операций чтения и записи. Другой поток заключается в буферизированный поток.

Потоки - это большая тема, и мы не будем здесь рассматривать их в полном объеме. Мы сконцентрируемся на рекомендуемых потоках для чтения и записи файлов. В большинстве случаев это будут символьные потоки, но для демонстрации возможностей мы будем использовать как байтовые, так и символьные потоки.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...