Работа с файлами в Java. Классы байтовых потоков. Классы InputStream и OutputStream

Страницы работы

Фрагмент текста работы

Программирование Тема 6.2 Работа с файлами в Java

1

Классы байтовых потоков

  • Фрагмент иерархии классов байтовых потоков

2

Классы байтовых потоков

  • В Java так же как и в С++ для описания работы по вводу/выводу используется специальное понятие поток данных (stream). Поток данных связан с некоторым источником, или приемником, данных, способным получать или предоставлять информацию. Соответственно, потоки делятся на входящие – читающие данные и выходящие – передающие (записывающие) данные. Введение концепции stream позволяет отделить основную логику программы, обменивающейся информацией с любыми устройствами одинаковым образом, от низкоуровневых операций с такими устройствами ввода/вывода.
  • В Java потоки естественным образом представляются объектами. Описывающие их классы как раз и составляют основную часть пакета java.io. Все классы разделены на две части – одни осуществляют ввод данных, другие – вывод.
  • На рисунке слайда представлен фрагмент иерархии классов байтовых потоков. Классы байтовых потоков используются для работы с бинарными файлами.
  • Классы входных байтовых потоков наследуются от InputStream, а выходных – от OutputStream. Базовые, наиболее универсальные, классы позволяют считывать и записывать информацию в виде набора байт. Чтобы их было удобно применять в различных задачах, java.io содержит также классы, преобразующие любые данные в набор байт.
  • Например, если нужно сохранить результаты вычислений – набор значений типа double – в файл, то их можно сначала превратить в набор байт, а затем эти байты записать в файл. Аналогичные действия совершаются и в ситуации, когда требуется сохранить объект (т.е. его состояние) – преобразование в набор байт и последующая их запись в файл. Понятно, что при восстановлении данных в обоих рассмотренных случаях проделываются обратные действия – сначала считывается последовательность байт, а затем она преобразуется в нужный формат.

3

Классы InputStream и OutputStream

  • Методы класса InputStream:
    • int read()
    • int read(byte[] buf)
    • int read(byte[] buf, int offset, int len)
    • available()
    • close()
  • Методы класса OutputStream:
    • void write(int)
    • void write(byte[] buf)
    • void write(byte[] buf, int offset, int len)
    • flush()
    • close()

4

Классы InputStream и OutputStream

  • InputStream – это базовый класс для байтовых потоков ввода. Методы этого класса необходимы всем классам, которые наследуются от InputStream.
  • Метод read() является абстрактным и, поэтому определяется в классах-наследниках. Этот метод предназначен для считывания ровно одного байта из потока, однако возвращает при этом значение типа int.. Если достигнут конец потока, то есть в нем больше нет информации для чтения, то возвращаемое значение равно -1. Если же считать из потока данные не удается из-за каких-то ошибок, или сбоев, будет брошено исключение java.io.IOException. Этот класс наследуется от Exception, т.е. его всегда необходимо обрабатывать явно.
  • На практике обычно приходится считывать не один, а сразу несколько байт – то есть массив байт. Для этого используется метод read(), где в качестве параметров передается массив byte[]. Возможна ситуация, когда в потоке байт содержится меньше, чем длина массива. Поэтому метод возвращает значение int, указывающее, сколько байт было реально считано. Понятно, что это значение может быть от 0 до величины длины переданного массива.
  • Если же мы изначально хотим заполнить не весь массив, а только его часть, то для этих целей используется метод read(), которому, кроме массива byte[], передаются еще два int значения. Первое – это позиция в массиве, с которой следует начать заполнение, второе – количество байт, которое нужно считать.
  • Метод available( ) возвращает значение типа int, которое показывает

Похожие материалы

Информация о работе