Неблокирующее чтение файлов - PullRequest
8 голосов
/ 19 января 2011

Есть ли в java неблокирующий API для чтения файлов? Если нет, то было бы разумно создать его на C ++ и вызывать из Java-приложения через JNI?

Ответы [ 2 ]

23 голосов
/ 17 октября 2011

Мой первоначальный ответ теперь неверен, так как добавление AsynchronousFileChannel в Java 7.

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

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

7 голосов
/ 19 января 2011

Нет, <a href="http://download.oracle.com/javase/6/docs/api/java/nio/channels/FileChannel.html" rel="noreferrer">FileChannel</a> не распространяется <a href="http://download.oracle.com/javase/6/docs/api/java/nio/channels/SelectableChannel.html" rel="noreferrer">SelectableChannel</a>.

Возможно, потому что не все ОС поддерживают это.

Windows поддерживает, и теоретически вы могли бы написать специфичную для Windows библиотеку C ++ и вызывать ее через JNI, но интеграция требует большой работыэто с java.nio.

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

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