суботу, 10 листопада 2007 р.

JSR 203 NIO2

API для доступа к файловой системе, асинхронных масштабируемых операций ввода-вывода, биндинга сокет-каналов и конфигурации, и групповые сообщения.
Предложенная спецификация продолжит работу определения набора новых улучшенных АПИ функций ввода/вывода которая началась в 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 events;
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 коментарі:

sanyastorm сказав...

А где можно взять Java 7 с NIO2. т.к. на сайте https://jdk7.dev.java.net/ есть Java7 но нио2 классов там нету ((.
P.S. отличная статья.

seth сказав...

Наверное реализация этого JSR только на стадии предложения и обсуждения комьюнити - больше инфы можно почерпнуть на прекрасном блоге Алекса Миллера http://tech.puredanger.com/java7#jsr203