Предложенная спецификация продолжит работу определения набора новых улучшенных АПИ функций ввода/вывода которая началась в JSR-51: Новое АПИ ввода/вывода для платформы Джава. Его основные компоненты будут:
1.Новый интерфейс файловой системы который поддерживает полный доступ к атрибутам файла, уведомления об изменении, уход от АПИ зависящего от файловой системы и интерфейс для сервис-провайдера чтобы можно было подключать свои реализации файловых систем
2.АПИ для асинхронных (в противовес к постоянному опросу, не блокирующее) операций ввода/вывода на сокетах и файлах.
3.Завершение реализации функциональности сокетных каналов предложенных в JSR-51, включая добавление поддержки для биндинга, настроечных элементов конфигурации, и групповых сообщений.
Пример для ожидания изменения некоторого файла:
FileSystem fs = ...
FileReference file = ...
WatchService watcher = fs.newWatchService();
file.register(watcher, WatchEvent.MODIFY_EVENT);
for (;;) {
// Ожидать ключ изменения
WatchKey key;
try {
key = watcher.take();
} catch (InterruptedException ie) {
continue; // ignore
}
// получить события ключа
List
try {
events = key.takeEvents();
} catch (WatchEventLostException e) {
}
// Обработка события
for (WatchEvent event: events) {
if ((event & WatchEvent.MODIFY_EVENT) > 0) {
FileChannel fc = FileChannel.open(file, OpenFlag.READ);
FileLock lock = fc.lock();
...
lock.unlock();
fc.close();
}
}
// сброс для получения следующих событий
boolean cancelled = key.reset();
if (cancelled) {
break;
}
}
2 коментарі:
А где можно взять Java 7 с NIO2. т.к. на сайте https://jdk7.dev.java.net/ есть Java7 но нио2 классов там нету ((.
P.S. отличная статья.
Наверное реализация этого JSR только на стадии предложения и обсуждения комьюнити - больше инфы можно почерпнуть на прекрасном блоге Алекса Миллера http://tech.puredanger.com/java7#jsr203
Дописати коментар