Как отменить отложенное открытие файла FileInputStream - PullRequest
1 голос
/ 08 августа 2009

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

new FileInputStream("a_file_that_the_antivirus_" + 
    "will_process_for_minutes_before_returning.jar")
// process the contents...

В приведенном выше примере первая строка может блокироваться, но я не знаю способа асинхронно отменить эту операцию (если мы получили новый объект inputtream, отмена так же проста, как в .close (), но этот вопрос не об этом случае).

Возможно ли прервать процесс открытия - возможно, с помощью NIO - или уже существует такой механизм, как простой Thread.interrupt () для отмены открытия?

ОС: в основном Windows XP +, Java 6+, блокировка обычно происходит из-за более крупных и глубоких jar-файлов - например, плагинов Eclipse или моих собственных сложных приложений.

Ответы [ 2 ]

1 голос
/ 08 августа 2009

Предположим, что не было никакого решения (я не могу найти одно, и я подозреваю, что мы застряли в вызовах уровня ОС), как плохо было бы на самом деле сделать попытку открытия в рабочем потоке и, в конечном итоге, истечь в ожидании этой темы. Затем ваша основная обработка может продолжиться, в то время как в backgrounbd этот рабочий поток в конечном итоге завершит свое открытие, но немедленно закроет файл снова - никто его больше не ждет.

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

0 голосов
/ 08 августа 2009

fileinputstream блокируется. Возможно, вы захотите взглянуть на Асинхронный файловый ввод / вывод в Java или java nio

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