| Главная » Статьи » 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 | |
| Просмотров: 402 | | |
| Всего комментариев: 0 | |