Использование FileChannel для записи любого InputStream?

Могу ли я записать любой 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?


person KiKi    schedule 08.07.2011    source источник


Ответы (2)


Channels.newChannel(InputStream in)

http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Channels.html

person Kal    schedule 08.07.2011

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

person Amlan Chatterjee    schedule 08.07.2011