Главная » Статьи » Java » Java Ranger Basic

День 7/21
Java IO


Из-за того, что скорость доступа к жесткому диску несоизмеримо меньше, чем к оперативной памяти, Java IO (input-output) ориентирована на потоки (streams). Говорить о Java input и output есть две причины. Первая – что мы говорим о передаче данных в виде потока (массив – это ограниченный кусок), а поток может прекратиться по требованию. А вторая, потому что мы часто переходим барьер JVM. Всего мы дважды пробиваем барьер JVM – на вводе и на выводе. Например, сначала, чтобы байты от веб-камеры попали в heap, в JVM на видео будет применен кодек, а потом, чтобы отдать их операционной системе, которая отдаст байты винчестеру, который запишет сырые байты.
Дизайн пакета java.io исходил из следующего: нужен некий метод copy(? src, ? dst), который получает какой-то источник и какой-то пункт назначения непонятных типов, и который мог бы скопировать что-угодно. Например, из файловой системы на аудио, проиграть какой-то mp3-файл, с веб-камеры делать трансляцию в интернет или сохранять байтовый массив. И чтобы это все делал один метод copy. Для этого нужно было придумать какие-то типы.
Потоки ввода-вывода можно проиллюстрировать с помощью диаграммы:




Решили, что будет два универсальных типа: InputStream и OutputStream. Это оба абстрактные классы. InputStream – это абстрактный класс, который принимает байты, а OutputStream – абстрактный класс, который отдает байты. Итого, если написать метод copy(InputStream is, OutputStream os), то в теле метода copy можно оперировать этими двумя абстракциями.
Для работы с файловой системой есть классы FileInputStream и FileOutputStream.
Для байтового массива – ByteArrayInputStream и ByteArrayOutputStream, которые являются классами-адаптерами.
InputStream и OutputStream отличаются от массивов тем, что:
у них нет размера, а у массивов есть (характеристика length), у строки есть длина (метод length()), у коллекций есть размер (метод size()).
у массивов произвольный доступ, а у streams последовательный доступ (что очень напоминает цикл foreach(…)).
в массивах класс открыт и на чтение, и на запись – можно прочитать и записать какую-то ячейку. А в streams четко разделили: InputStream позволяет только читать, а OutputStream – только писать.
массив – многоразовый, а streams – одноразовые, они читаются в одну сторону.
Ключевое исключение здесь – IOException.



В следующей теме мы рассмотрим: Java IO - Streams, Readers

Источник: http://becomejavasenior.com/courses/?utm_source=Java+Email+Courses&utm_campaign=aa710df388-JavaRangerBasicIntro&utm_medi
Категория: Java Ranger Basic | (06.10.2015) W
Просмотров: 402 | Теги: Basic, ranger, java | Рейтинг: 0.0/0
Всего комментариев: 0
avatar