Чем stream отличается от итератора java

Как java.Ио.Buffer * stream отличается от обычных потоков?

1) Как буферизованные потоки работают в фоновом режиме, чем они отличаются от обычных потоков и в чем преимущество их использования?

2) DataInputStream тоже байт на основе. Но методы readLine() . Какой в этом смысл?

5 ответов

из javadoc BufferedInputStream:

A BufferedInputStream добавляет функциональность к другому входному потоку-а именно, возможность буферизации ввода и поддержки методов mark и reset. При создании BufferedInputStream создается внутренний буферный массив. Когда байты из потока считываются или пропускаются, внутренний буфер по мере необходимости заполняется из содержащегося входного потока, много байтов за раз. Операция mark запоминает точку в входной поток и операция сброса приводит к тому, что все байты, считанные с момента последней операции метки, перечитываются до того, как новые байты будут взяты из содержащегося входного потока.

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

наоборот для BufferedOutputStream.

mark () и reset () можно использовать следующим образом:

чтобы объяснить Марк / сброс еще немного.

BufferInputStream внутренне запоминает текущую позицию в буфере. По мере чтения байтов позиция будет увеличиваться. Вызов mark (10) сохранит текущую позицию. Последующие вызовы read будут продолжать увеличивать текущую позицию, но вызов reset вернет текущую позицию к ее значению, когда Марк был называемый.

аргумент mark указывает, сколько байтов вы можете прочитать после вызова mark, прежде чем позиция mark станет недействительной. После того, как позиция метки недействительна, вы больше не можете вызвать сброс, чтобы вернуться к ней.

например, если бы Марк (2) был использован в строке 4 выше, исключение IOException было бы вызвано при вызове reset () в строке 6, поскольку позиция метки была бы недействительной, так как мы читаем более 2 байтов.

Буферизованные читатели / писатели/InputStreams / OutputStreams чтение и запись в ОС большими кусками для оптимизации. В случае писателей и outputstreams данные буферизуются в памяти до тех пор, пока не будет собрано достаточно, чтобы записать большой кусок. В случае читателей и inputstreams, большой кусок читается форма disk/network/. в буфер, и все чтения выполняются из этого буфера, пока буфер не будет пуст, и новый кусок считывается.

DataInputStream действительно основан на байтах. Этот метод readLine устарел. Внутренне он считывает байты с диска / сети/. байт за байтом, пока не соберет полную строку. Таким образом, этот поток можно ускорить, используя BufferedInputStream в качестве источника, так что байты для строки считываются из буфера в памяти, а не непосредственно с диска.

при не буферизованном вводе-выводе каждый запрос на чтение или запись передается непосредственно в операционную систему. Буферизованные потоки ввода-вывода Java читают и записывают данные в свой собственный буфер памяти (обычно массив байтов). Вызовы операционной системы выполняются только тогда, когда буфер пуст (при выполнении чтения) или буфер заполнен (при выполнении записи). Иногда рекомендуется вручную очистить буфер после критических точек в приложении.

Так как вызовы API операционной системы могут привести в доступе к дискам, сетевой активности и тому подобном это может быть довольно дорого. Использование буферов для пакетного ввода-вывода собственной операционной системы в большие блоки часто значительно повышает производительность.

Буферизованные потоки пишут или читают данные в больших кусках по-nomen est omen -буферизация. В зависимости от базового потока, это может значительно повысить производительность.

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

чтобы уменьшить такие накладные расходы, платформа Java реализует буферизованные потоки ввода-вывода. Буферизованные входные потоки считывают данные из области памяти, известной как буфер; собственный входной API вызывается только тогда, когда буфер пуст. Аналогично, буферизованные выходные потоки записывают данные в буфер, а собственный выходной API вызывается только тогда, когда буфер заполнен.

Чем stream отличается от итератора java

Java [прим. 1] — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process; язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.

Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, для которой существует реализация виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года. Занимает высокие места в рейтингах популярности языков программирования (2-е место в рейтингах IEEE Spectrum (2020) [2] и TIOBE (2021) [3] ).

Java8 stream API, часть третья: многопоточность

Parallel_drainage_pattern

Во второй части я упомянул, что map/reduce подразумевает параллельное исполнение шага map. Stream API предоставляет очень простой механизм для выполнения операций над потоком параллельно: входной поток разбивается на части, если это возможно, и каждая такая часть обрабатывается параллельно с остальными, в раздельных нитях.

Например мне нужно узнать, сколько в каждом году снималось фильмов. Для этого я скачиваю данные imdb и анализирую их:

В данном случае возвращается Map < String , Integer > , в которой ключ — год, а значение — количество фильмов снятых в этом году. Для получения такого результата я использую коллектор groupingBy ( ) , у которого есть три варианта.

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

Параллельная обработка

Из stream pipeline видно, что операции map и filter независимы и могут быть исполнены одновременно над разными элементами потока. Группирующий коллектор тоже может вызывать коллекторы для значений параллельно. Чтобы сделать stream параллельным, надо изменить буквально одну строку:

Вызов parallenStream ( ) создаёт объект Stream, операции над которым могут быть выполнены, по возможности, параллельно, давая, тем самым, прирост производительности.

Коллектор groupingByConcurrent ( ) полностью совместим с gropingBy ( ) коллектором, но при этом дружественнен параллельной обработке.

Какой же профит? В коде примера на github есть методы по учёту времени исполнения. Однопоточной версии требуется 3.6 секунд на обработку списка фильмов, многопоточной всего лишь 2.7 секунды. Говоря другими словами, многопоточный код исполняется на 33% быстрее. Так может быть стоит все потоки создавать параллельными?

Недостатки parallelStream()

Главная проблема с parallelStream() в том, что они используют единый для всей jvm thread pool. Говоря простыми словами — если у вас есть какое-то количество потоков, обрабатывающих запросы пользователей и в каждом потоке выполняются какие-либо операции над parallelStream(), эти потоки будут вынуждены ждать друг друга. Например, первый поток обрабатывает запрос пользователя по подсчёту чего-нибудь пользовательского и занимает все нити в thread pool. Второй поток, в который придёт второй пользователь и сделает такой-же запрос, будет ждать, пока первый поток досчитает и освободит нити. И это, конечно, не то, чего бы вы хотели и чего ожидают ваши пользователи.

Вторая проблема вырастает из самой сути многопоточности — уследить за нежелательными эффектами от влияния нитей друг на друга становится ещё сложнее. Stream api не предлагает янвых средств синхронизации нитей, предполагая, что либо весь код в pipeline будет stateless, либо автор кода знает что делает. С другой стороны, ограничения на использование локальных переменных в лямбда-выражениях, о которых я писал ранее, продиктованы именно соображениями потокобезопасности.

Третья проблема в том, что параллельность обработки вообще не гарантируется и зависит от источника данных. А прирост производительности зависит от его способности корректно разделить набор данных на независимые блоки. В дальнейшем я покажу, что объекты Stream можно создавать не только из коллекций, но сейчас важно знать, что наличие в коде вызова parallelStream() не гарантирует, что обработка действительно будет выпольняться параллельно

Изучение Java и получение «Java SE 6 Programmer» сертификата

Привет, Хабр!
Хочу поделится историей, как я (18-летний студент) взялся всерьёз за изучение Java SE 6 и как результат получил сертификат «Oracle Certified Professional, Java SE 6 Programmer».
Пост охватывает самые последние реалии получения сертификата и компиляцию ссылок на другие статьи, книги, тесты.
Кому интересно получение такой замечательной бумажки — прошу под кат…

1. Зачем нужна сертификация?

Раз вы здесь, то скорее всего уже знаете ответ на этот вопрос. Скажу о себе.

  • Благодаря подготовке к сертификации я методично и по нескольку раз изучил все основные разделы языка, читая подготовительные книги
  • При подготовке на тестах нашёл свои слабые места и устранил их
  • Получил знания по разработке программ, практических применениях ООП, познакомился с Design Patterns
  • Практически с нуля поднял свои знания по чтению английcкой технической литературы (у меня крайне плохо с языком, скорей всего хуже чем у вас)
  • Благодаря получению бумажки я формально закрепил результат изучения
  • Повысил самооценку (практически-полезных достижений в программировании пока не много, олимпиады не в счёт)

2. Как происходит сдача
Сдаётся экзамен в авторизированном компанией Pearson VUE центре. Раньше был ещё Prometric, но с начала мая 2011 он не работает с Oracle. Стоимость (на март 2011) 120$ . Скидки для студентов были при Sun, сейчас их отменили. Язык русский или английский, я выбрал английский, т.к. говорят, что в русском кривой перевод, да и повод был поднять уровень языка.
Обатите внимание, что при оформлении заявки на экзамен в графе дата будет стоять сначала месяц, потом день. Американская система.
Экзамен идёт 3 часа, я закончил и дважды всё проверил за 2. В кабинете находится администратор и камеры. Перед началом просят выложить всю электронику в соседнем кабинете, выдают маркер и листок.
Сдаётся на компьютере, в десктопном приложении. 60 вопросов в формате теста. 1 или несколько вариантов ответов, если несколько — об этом сообщается. Так же есть задания на перетаскивание кусков в кода программу с недостающими кусками. Пример можете найти в онлайн-симуляторе Wizlabs, ссылка будет ниже.

Вот собственно и всё то, чем я руководствовался при подготовке. Информации очень много, однако если понимать что происходит — язык учится без проблем.
В сумме ушло месяц на размеренное чтение Эккеля и 10 дней задротства второй книги и тестов.
После сдачи сертификата будет возможность изменить своё имя, если опечатались, изменить адрес. Мне (Гатчина) сертификат прибыл ровно через 50 дней после сдачи, из Дублина.

Теги: java 6, сертификация

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

Ожидается, что новая версия Java 9 выйдет уже 27 июля 2017 года. Давайте разберёмся, какие функции появятся, и расскажем, зачем они нужны.

Вот список важных нововведений Java 9:

С помощью примеров расскажем подробнее об этих функциях.

JShell

REPL (англ. read-eval-print loop) — система для интерактивного программирования в консоли. То есть если пользователь вводит строку кода, в консоли появляется результат её выполнения и этот процесс повторяется.

Oracle представила новый инструмент под названием «JShell». Он используется для тестирования и использования в консоли разных конструкций, например классов, интерфейсов, перечислений, объектов, операторов и т.д.

Кстати, уже сейчас можно загрузить бета-версию JDK 9, скачав её с официального сайта .

Простейший пример работы с JShell:

G:\>jshell | Welcome to JShell — Version 9-ea | For an introduction type: /help intro jshell> int a = 10 a ==> 10 jshell> System.out.println(«a value one»,»two»,»three»); // неизменяемый список, содержащий информацию

Map имеет два набора методов: of() методы и ofEntries() методы для создания объектов Immutable Map и Map.Entry.

Jshell> Map emptyImmutableMap = Map.of() emptyImmutableMap ==> // пустое неизменяемое отображение jshell> Map nonemptyImmutableMap = Map.of(1, «one», 2, «two», 3, «three») nonemptyImmutableMap ==> // неизменяемое отображение

Private методы в интерфейсах

В Java 8 мы можем обеспечивать реализацию метода в интерфейсах, используя default и static методы. Однако мы не можем создавать private методы в интерфейсах.
Для избавления от нагромождения и переизбытка кода Oracle собирается добавить private методы в интерфейсы Java SE 9. Начиная с девятой версии, мы также сможем создавать private static методы в интерфейсах с помощью private.

Создание реализации метода для интерфейса по умолчанию:

Модульная система

Одним из самых значительных изменений является появление модульной системы. До Java 9 мы использовали JAR-файлы для разработки приложений, базирующихся на Java. Однако, эта архитектура имеет несколько ограничений и недостатков. Для их устранения и внедрили модульную систему . Это нововведение является частью проекта Jigsaw , который разрабатывается для того, чтобы программисты могли разбивать программы на независимые и межпрограммные модули.

Вот некоторые из функций этой системы:

  • модульная JDK;
  • модульный исходный код Java;
  • модульные run-time изображения;
  • инкапсуляция внутренних API;
  • система модульной платформы;

JDK 9 поставляется с 92 модулями. Мы можем использовать их или создать свои, например:

Каждый модуль имеет имя, связанный код и другие ресурсы.

Улучшение API

Ожидается, что в Java SE 9 будут произведены улучшения по части API. Будут добавлены несколько новых классов и методов для более удобного управления действиями операционной системы.
Два новых интерфейса в Process API:

  • java.lang.ProcessHandle;
  • java.lang.ProcessHandle.Info.

Пример Process API:

ProcessHandle currentProcess = ProcessHandle.current(); System.out.println(«Current Process Id: journaldev.txt»)); try (BufferedReader reader2 = reader1) >

Пример в Java 9:

Можно заметить, что в новой версии, после try не обязательно объявлять новую переменную.

Новшества в CompletableFuture API

В Java 9 Oracle также собирается улучшить CompletableFuture API для решения проблем, появившихся в Java SE 8. В планах добавить задержки и тайм-ауты, дополнительные методы и улучшить подклассы.

Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);

Здесь delayedExecutor() — static метод, используемый для возврата исполнителя, после заданной задержки.

Реактивное программирование

Для тех, кто ещё не знаком с парадигмой реактивного программирования, советуем прочитать наше в тему с примерами.
В Scala, Play, Akka уже были интегрированы reactive streams. Oracle решила добавить Reactive Streams API в Java SE 9.

Java SE 9 Reactive Streams API — фреймворк для реализации асинхронных, масштабируемых и параллельных приложений с использованием Java.

В Java SE 9 появятся следующие API:

  • java.util.concurrent.Flow;
  • java.util.concurrent.Flow.Publisher;
  • java.util.concurrent.Flow.Subscriber;
  • java.util.concurrent.Flow.Processor.

Diamond оператор для анонимных классов

Предположим, что у нас есть класс Box и мы хотим сделать его анонимным.
Вот как выглядит этот процесс в Java 8:

Разве не очевидно, что Box должен быть типа T? Компилятор в случае не-анонимного класса выбрал бы нужный тип, так почему бы не сделать то же самое с анонимным?

Проблема в не обозначаемых (англ. non-denotable) типах, которые распознаются компилятором, а JVM — нет. (Такой случай может быть обработан компилятором, но вопрос — как корректно передать его JVM.)

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

Вот как это выглядит в Java 9:

Дополнительные улучшения в классах

Stream emp = getEmployee(id); Stream empStream = emp.flatMap(Optional::stream);

Здесь используется метод Optional.stream(), который конвертирует всё в поток Employee.

Улучшения Stream API

В новой версии появятся как минимум четыре метода java.util.Stream . Как и stream, все они будут стандартными. Наиболее важными являются dropWhile и takeWhile методы.
Если вы знакомы с языком Scala или функциональным программированием, вы обязательно узнаете эти методы.

Простейшее применение stream:

Jshell> Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i . Их услышали и добавили возможности работы с устаревшими API. Например, появились инструменты для их анализа — forRemoval и since .

HTTP/2 клиент

Oracle планирует выкатить новый HTTP-клиент для поддержки протоколов HTTP/2 и WebSocket. Они заменяют HttpURLConnection API на новый, более производительный.
Новый API будет представлен в пакете «java.net.http». Он поддерживает как синхронный, так и асинхронный режимы.

Новый API можно посмотреть

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

Виртуальная машина

InvokeDynamic

Строгая проверка бинарных класс-файлов

Синтаксический сахар

Изменения в ядре

Обновление архитектуры classloader»а

Метод close для URLClassLoader

Обновления для java.util.concurrent и коллекций

Интернационализация

Unicode 6.0

Улучшение java.util.Locale

Разделены локаль пользователя и локаль графического интерфейса

Ввод-вывод и работа с сетью

Поддержка стандартов

Безопасность и шифрование

Клиентская часть

Конвейер XRender для Java2D

Введение API для новых графических возможностей

Новый look-and-feel

Новый декаратор JXLayer

Новый синтезатор звука

Управление

Итак, покрыта большая часть нововведений. Пожалуйста, отпишитесь в комментариях, о чём бы вы хотели прочитать подробнее.

JDK 1.0 (23 января 1996)

Кодовое имя Oak .

Первый выпуск. Первой стабильной версией стала JDK 1.0.2.

JDK 1.1 (19 февраля 1997)

Наиболее значимые дополнения:

  • обширное изменение событий библиотеки AWT
  • в язык добавлены внутренние классы
  • JavaBeans (классы в языке Java, написанные по определённым правилам. Они используются для объединения нескольких объектов в один для удобной передачи данных)
  • JDBC (соединение с базами данных) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД
  • RMI (программный интерфейс вызова удаленных методов)
  • ограниченная рефлексия (модификация во время выполнения невозможна, есть только наблюдение собственной структуры)

J2SE 1.2 (8 декабря 1998)

Кодовое имя Playground .

Следующей базовой версией Java стала версия Java 2, символизировавшая собой второе поколение. Первой версии Java 2 был присвоен номер 1.2. С появлением версии 2, SUN Microsystems стала выпускать Java в виде пакета J2SE (Java 2 Platform Standard Edition — Стандартная версия платформы Java 2) и теперь номера версий указываются применительно к этому продукту.

Java 2 , или Java 2.0 — дальнейшее развитие и усовершенствование спецификации исходного стандарта языка и платформы Java , на который теперь принято ссылаться как на Java 1.0. В настоящее время спецификация платформы Java 2 продолжает интенсивно развиваться и обогащаться, пополняясь новыми возможностями, особенно из за конкуренции с платформой.Net, перенявшей у Java ряд ключевых особенностей.

Основными усовершенствованиями Java 2 по сравнению с Java 1.0 являются:

  • Swing включен в спецификацию платформы Java 2
  • Policy файлы
  • Цифровые сертификаты пользователя
  • Библиотека Accessibility
  • Java 2D
  • Поддержка технологии drag-and-drop
  • Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках
  • Поддержка воспроизведения аудиофайлов нескольких популярных форматов
  • Полная поддержка технологии CORBA
  • Включение в JDK для Java 2 JIT-компилятора, улучшенная производительность
  • Усовершенствования инструментальных средств JDK , включая поддержку профилирования Java-программ

J2SE 1.3 (8 мая 2000)

Кодовое имя Kestrel .

J2SE 1.4 (6 февраля 2002)

Кодовое имя Merlin .

J2SE 5.0 (30 сентября 2004)

Кодовое имя Tiger . Спецификация Java 5 была выпущена в сентябре 2004 года. В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

  • Перечислимые типы (enum). Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей.
    • Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные.
    • Перечисление может реализовывать интерфейсы.
    • Для перечислений имеются встроенные методы, дающие возможность получения значений типа по имени, символьных значений, соответствующих именам, преобразования между номером и значением, проверки типа на то, что он является перечислимым.

    Java SE 6 (11 декабря 2006)

    Основная статья: История версий Java 6

    Кодовое имя Codename Mustang .

    Java SE 7.0 (7 июля 2011)

    Java SE 7 Update 1

    • данный релиз содержит исправления уязвимостей безопасности
    • исправлено 6 ошибок

    Java SE 7 Update 2

    • Новый JVM (Java HotSpot Virtual Machine, версия 22), который повышает надежность и производительность
    • Поддержка Oracle Solaris 11
    • Поддержка Firefox 5 и старше
    • JavaFX входит в состав Java SE

    Java SE 7 Update 3

    • данный релиз содержит исправления 14 уязвимостей безопасности

    Java SE 8.0

    Ожидается в середине 2013 года . Будет содержать

    См. также

    Примечания

    Ссылки

    Wikimedia Foundation . 2010 .

    Что нового появилось в Java SE 6 ?

    Если сравнивать с тем, что изменилось в Java 5.0 по сравнению с Java 1.4, то такого рода изменений не произошло. Совсем. Язык остался таким, каким он был.

    А вот если посмотреть на другие аспекты, то тут произошло мнго изменений, которые я постараюсь описать. Вряд ли смогу описать все подробно – думаю, что для этого проще зайти на сайт Sun и почитать –

    Данная работа появилась именно в результате чтения всех новинок. А там есть что посмотреть. Я не включил описание всех изменений, указанных в официальной документации потому, что посчитал не все столь важным и нужным. Да и объем такой большой, что заняло бы это у меня много времени. Задача данной статьи просто коснуться того, что изменилось. Если вас заинтересует какая-то область, то идите по ссылкам. Итак, давайте по порядку.

    Collection Framework

    Здесь появились новые интерфейсы и реализации этих интерфейсов.

    Deque – развитие интерфейса Queue. Название расшифровывается как «double ended queue» и произносится как ДЕК. Как вы наверно догадались основная идея в том, чтобы организовать очередь, которая работает с обоих концов – как FIFO (интерфейс Queue) и LIFO (интерфейс Stack)

    BlockingDeque – интерфейс позволяет блокировать себя при ожидании поступления в очередь элемента.

    NavigableSet , NavigableMap – интерфейсы позволяют искать наиболее близкое значение в наборе.

    ConcurrentNavigableMap – тоже, что и NavigableMap , но еще поддерживает рекурсию в подмэпах. Не смотрел более подробно – предоставляю это сделать вам самим.

    Реализации (я думаю. что вы сами догадаетесь, какие интерфейсы они реализуют):

    ArrayDeque , ConcurrentSkipListSet , ConcurrentSkipListMap , LinckedBlockingDeque

    Также надо отметить, что изменились существующие классы, которые теперь реализуют новые интерфейсы.

    Это – LinkedList , TreeSet , TreeMap.

    Deployment (Java Web Start and Java Plug-in)

    В общем основная идея в том, что теперь изменен формат кэширования приложений для Web Start. Также появились некоторые дополнительные фичи при загрузке – система управления кэшем, поддержка параметра “no-cache” в HTTP-запросе.

    Есть некоторые изменения по безопасности, среди которых я бы выделил поддержку сертификатов.

    Internationalization Support

    Наверно самое впечатляющее для меня было то, что окзазывается поддерживается не один Григорианский календарь, а целых три:

    — Григорианский календарь (с версии 1.1)

    — Буддисткий календарь (с версии 1.4)

    — Японский императорский календарь (с версии 1.6)

    I / O Support

    Изменения затронули два пакета:

    Появился новый класс – Console. (http://java.sun.com/javase/6/docs/api/java/io/Console.html)

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

    Console cons; char passwd; if ((cons = System.console()) != null && (passwd = cons.readPassword(«[%s]», «Password:»)) != null)

    if ((cons = System . console () ) != null && (passwd = cons . readPassword («[%s]» , «Password:» ) ) != null )

    java . util . Arrays . fill (passwd , » » ) ;

    Также следует обратить внимание на новые методы в классе File для работы с диском – getTotalSpace (), getFreeSpace (), getUsableSpace (). И для работы с файлом –setWritable (), getReadable (), getExecutable ()

    java. nio

    Сделана новая имплементация для java. nio. channels. SelectorProvider . Как пишут, он теперь более масштабируем.

    И изменен метод lock для класса java. nio. channels. FileChannel . Так что тем, кто их использует надо быть внимательнее.

    JAR (Java Archive Files)

    Здесь было приятно увидеть следующее. Появилось два класса-потока:

    1. java . util . zip . DeflaterInputStream – чтение сжатых данных из потока
    2. java . util . zip . InflaterOutputStream – запись сжатых данных в поток

    Это позволяет передавать по сети сжатые данные, что не может не радовать.

    Кроме этого были сделаны дополнения:

    Список файлов в архиве теперь не ограничен 64Кб (была такая проблема при больших архивах, где много файлов)

    Для Windows сделаны дополнения: имя файла теперь может быть длиннее 256 символов и ограничение на одновременное открытие более 2000 zip -файлов тоже снято. Наверно какое-то ограничение осталось, но видимо оно теперь слишком большое.

    Утилита JAR теперь имеет ключик e – он позволяет задать точку входа – аналог аттрибута Main — Class в манифесте.

    JMX (Java Management Extensions)

    Поначалу я думал. что смогу осилить описание изменений, которые сделаны в данной области, но не думаю, что этот труд будет оценен. В двух словах – введена поддержка generics, улучшены свойства MBeans и исправлено достаточно много багов. Больше не хотелось бы говорить, кому очень надо – идите по ссылке JMX API Enhancements

    Хотя думаю, что те, кто заинтересован в такой инфомрации уже там побывали.

    JPDA (Java Platform Debugger Architecture)

    Для тех, кого этот вопрос мало интересует (а таких думаю как раз большинство) этот раздел вряд ли представляет большой интерес.

    JVM TI (Java Virtual Machine Tool Interface)

    Тем кто знает, что такое JVM TI могу сообщить только одно – он был улучшен и изменен. Более подробно вряд ли есть смысл описывать. Тем же кто очень хочет узнать. что это такое советую заглянуть вот сюда — JVM™ Tool Interface

    JConsole for Java SE 6

    Тем кто пользовался могу сообщить, что теперь JConsole является официально поддерживаемой утилитой. Тем кто не знает, что это такое скажу только что это утилита, которая в графическом виде позволяет заниматься мониторингом JVM. Насколько это важно и нужно – решать вам.

    Networking Features

    Здесь есть что посмотреть.
    Во-первых надо обратить внимание на класс java.net.NetworkInterface . Он теперь позволяет получить много информации: о маске подсети, broadcast адрес, MAC-адрес.Во-вторях появился новый класс —java.net.InterfaceAddress . Позволяет получить информацию о сетевом интерфейсе, причем как для IPv4, так и для IPv6.Изменения коснулись также поддержки NTLM, HTTP-аутентификации и работы с куками.

    Я не думаю, что надо перечислять все, что там сделано, но с другой стороны не упомянуть об этом было бы не очень разумно. В данном случае придется опять обойтись ссылкой — Java SE 6 Performance White Paper

    Единственное, чтобы я выделил – результаты тестов, представленные в данной статье. Впечатлило. Общая производительность вычислений возрасла блее чем на 70%. Операции ввода/вывода – в два раза.

    Drag and Drop

    Кроме того, что этот механизм теперь сделан более удобным для программистов сказать нечего. Равзе что пример спасет ситуацию.

    Здесь я бы выделил несколько моментов (тем более еще есть в памяти конференция)

    Вот какие моменты осветили:
    1. TrayIcon — в общем радуйтесь — теперь иконка в трее будет там, где это только возможно
    2. SpalshScreen — при старте приложения можно вывести картинку на время закгрузки. И если загрузка продолжается уже после старта JVM (вам что-то необходимо добавить, соеденить и прочая) вы можете управлять вашей картинкой. Т.е. что-то рисовать на ней.
    3. Обработка текста на LCD. В общем идея следующая — при красивой прорисовке текста на LCD используеся не один цвет, а несколько для улучшения восприятия. Вот это и введено будет в 1.6
    4. Улучшена скорость OpenGL и DirectX
    5. Т.к. заканчивается срок лицензии на формат GIF будет сделан GIF-Writer с помощью которого можно будет записывать графически файлы
    6. Улучшения для деплоя приложения — в общем какие-то изменения для WebStart. Что именно — не упомнить.
    7. SWING — тут изменений было несколько, так что буду перечислять подряд
    7.1. Look & Feel — теперь они будут использовать сами ОС и ваши приложения будут выглядеть так же как нативные приложения. И если вдруг вы введете новые темы в вашу ОС, то JAVA-риложения подхватят это тоже. Т.е. теперь LF используют данные из ОС, чтобы рисовать компоненты.
    7.2. SwingWorker — записал, но к чему это относится — не могу вспомнить. По-моему к тредам про прорисовке. Т.е. что-то там стало лучше.
    7.3. LayoutEnhacement — дополнительные возможности для лэйаутов.
    7.4. Drag&Drop — теперь это будет очень просто реализовать
    7.5. True Double Buffering — при перетаскиваниии окна поверж другого могли возникать пустые прямоугольники. Теперь этого не будет. Вообще прорисовка будет еще быстрее. Посмотрим.
    7.6. Text Printing — была такая проблема, что текст мог раюиваться при печати пополам — вержняя часть строки на одной странице, нижняя — на другой. Теперь этой пробелмы не будет, утверждал докладчик.
    7.7. JTable теперь будет уметь сортировать и фильтровать
    7.8. В табуляторы теперь можно будет помещать любые компоненты. Т.е. теперь закладочки будут делать то, что вы от них захотите. Что достаточно удобно.

    Я конечно же осветил не все. Но может быть кому-то данная статья поможет сориентироваться в нововведениях Java SE 6. И тогда буду считать, что писал эту статью не зря. Спасибо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *