Используя FileChannel для записи любого InputStream? - PullRequest
11 голосов
/ 08 июля 2011

Могу ли я записать любой InputStream в FileChannel?

Я использую java.nio.channels.FileChannel, чтобы открыть файл и заблокировать его, а затем записать InputStream в выходной файл. InputStream может быть открыт другим файлом, URL, сокетом или чем-либо еще. Я написал следующие коды:

FileOutputStream outputStream = new FileOutputStream(outputFile);
FileChannel outputChannel = outputStream.getChannel();
FileLock lock = outputChannel.lock();
try {
    outputChannel.transferFrom(???);
} finally {
    lock.release();
    outputChannel.close();
    outputStream.close();
}

Однако первый аргумент outputChannel.transferFrom (...) запрашивает объект ReadableByteChannel. Поскольку я использую InputStream в качестве входных данных, у него нет метода inputStream.getChannel () для создания необходимого канала.

Есть ли способ получить ReadableByteChannel из InputStream?

Ответы [ 2 ]

25 голосов
/ 08 июля 2011
9 голосов
/ 08 июля 2011

Вы можете использовать ReadableByteChannel readableChannel = Channels.newChannel (myinputstream).

...