Почему Java использования AsynchronousFileChannel?

Я могу понять, почему сетевые приложения использовали бы мультиплексирование (для не создания слишком многих потоков), и почему программы будут использовать асинхронные вызовы для конвейерной обработки (более эффективного). Но я не понимаю цели эффективности AsynchronousFileChannel.

Какие-либо идеи?

15
задан Joey Bell 4 May 2010 в 22:08
поделиться

1 ответ

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

Например: read() методы класса возвращают объект Future для получения результата чтения данных из файла. Итак, что вы можете сделать, это вызвать read(), который немедленно вернется с объектом Future. В фоновом режиме другой поток будет считывать фактические данные из файла. Ваш собственный поток может продолжать заниматься своими делами, а когда ему понадобятся считанные данные, вы вызовете get() на объекте Future. Это вернет данные (если фоновый поток еще не закончил чтение данных, он заставит ваш поток блокировать их до тех пор, пока они не будут готовы). Преимущество этого метода в том, что вашему потоку не нужно ждать всю длину операции чтения; он может заниматься другими делами, пока ему действительно не понадобятся данные.

См. документацию.

Обратите внимание, что AsynchronousFileChannel будет новым классом в Java SE 7, которая еще не выпущена.

8
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: