Рубрики
Java

Java. Примеры копирования файлов. Эволюция и революция.

Задачка копирование файлов в свое время была хорошим тестом для программистов.

1. Streams.

До появления пакета NIO (New I/O, версия Java 1.4) многие использовали обычные потоки.

    public static void copy(File source, File dest) throws IOException {
        FileInputStream is = new FileInputStream(source);
        try {
            FileOutputStream os = new FileOutputStream(dest);
            try {
                byte[] buffer = new byte[4096];
                int length;
                while ((length = is.read(buffer)) > 0) {
                    os.write(buffer, 0, length);
                }
            } finally {
                os.close();
            }
        } finally {
            is.close();
        }
    }

2. New I/O

В 2000-ном году появился пакет java.nio. Акроним NIO означает New I/O (новый ввод/ввывод). Отчасти я согласен с мнением, что название было выбрано не очень удачным, т.к. не сложно было предположить, что пройдет время и будет нелепо называть новым пакет 12-летней давности.

С помощью NIO копирование файлов смотрелось более изящно, решение эволюционировало следующим образом:

    public static void copy(File source, File dest) throws IOException {
        FileChannel sourceChannel = new FileInputStream(source).getChannel();
        try {
            FileChannel destChannel = new FileOutputStream(dest).getChannel();
            try {
                destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
            } finally {
                destChannel.close();
            }
        } finally {
            sourceChannel.close();
        }
    }

Легко видеть, что здесь мы избавились от цикла, используем "новое" API и сократилось количество кода.

3. Apache Commons IO.

Тем не менее, многих ленивых программистов такое развитие не особо впечатлило и те кто знал, продолжил использовать Apache Commons IO.

    public static void copy(File source, File dest) throws IOException {
        FileUtils.copyFile(source, dest);
    }

Единственным неудобством была необходимость в дополнительной сторонней библиотеке. Тем не менее, поскольку библиотека предоставляла программистам еще много другого удобного API для работы с I/O, по моим наблюдениям файл commons-io-*.jar стал присутствовать во многих крупных проектов того времени.

4. Java 7.

Революция произошла с выходом Java 7, релиз который был сделан уже Oracle, а не Sun Microsystems.
Появился класс Files, с помощью которого копирование файлов стало не намного сложнее чем commons-io:

    public static void copy(File source, File dest) throws IOException {
        Files.copy(source.toPath(), dest.toPath());
    }

При этом не нужно прописывать в мавене дополнительную зависимость.

Понятно, что это доступно только для Java 7 и предыдущие ее версии во всю используются многими компаниями. Тем не менее, в связи с недавней новостью о том, что Oracle выпустил недавно свое последнее публичное обновление для Java 6, возможно многие все-таки будут постепенно переползать на семерку.

Рубрики
0. Мироощущение и бытие

Сколько стоит талант программиста (и не только).

gold
Фото с wikipedia

Давно уже ничего не писал на общие темы - о выборе профессии, жизненном пути или поиске предназначения. Последний раз подобных тем касался почти три года назад.

Прежде чем начать изложение, хотел сообщить, что я осознаю всю нестрогость моих расчетов и надеюсь никто не станет воспринимать приведенные ниже доводы буквально!

Теперь можно приступать.

Думаю многие знают о происхождении слова талант. Если кто не знает и есть желание подробно изучить этот вопрос, то привожу ссылку на соответствующую статью в википедии. В кратком изложении вся история с талантом выглядит следующим образом.

Талант, в современном понимании, это определённые способности, которые раскрываются с приобретением навыка и опыта. Поиск источника такого толкования этого слова приведет нас к притче о талантах.

В древнем мире талант был мерой веса. В той притче некий хозяин раздал своим рабам несколько  талантов золота. Одному дал пять, другом два, третьему один. Затем отлучился на некоторое время. Когда вернулся стал выяснять кто что сделал.

Один приумножил, второй разменял, а третий закопал свой талант в землю. Того, кто закопал, хозяин отругал, других похвалил и наградил. Мораль — закапывать свой талант плохо, приумножать — хорошо.

Недавно мне стало интересно, а сколько именно было закопано? Немного покопавшись в интернете нашел приближенные исходные данные и произвел следующий расчет.

Рубрики
Java

JavaJobs.ru - перезагрузка.

Года три-четыре назад в качестве "лабораторного" эксперимента мною был сделан сайт JavaJobs.ru.
В основе лежало желание создать небольшой ресурс (в большей части для собственных нужд), упрощающий поиск свежих и интересных вакансий для java-программистов.

Помимо этого, у меня была идея создать небольшую игровую площадку для себя, на которой можно было бы ставить различные программистcкие опыты.
Это было необходимо для проверки жизнеспособности новых (или наоборот архаичных) технологий.

Работа над этим проектом велась в свободном режиме, в перерывах между работами по коммерческими проектами.

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

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

В декабре удалось выкроить немного времени, разобраться Twitter Bootstrap (HTML и CSS фреймворк). В итоге была запущена третья редакция с обновленным интерфейсом.

Несмотря на то, что javajobs-робот иногда простаивал, я все же решил построить график изменения количества найденных ссылок на вакансии:

Рубрики
Java

Java Security Update (Java 7u13)

Вышло долгожданное обновление Java!

Java
Oracle выпустил релиз даже раньше запланированного срока (изначально должен был выйти 19 февраля 2013г).
В анонсе сказано, что обновление содержит 50 исправлений безопасности:

Due to the threat posed by a successful attack, Oracle strongly recommends that customers apply CPU fixes as soon as possible. This Critical Patch Update contains 50 new security fixes across Java SE products.

Как обычно, обновление можно скачать с сайта java.com (JRE) или с сайта oracle.com (JDK, JRE и все остальное).