Цель: Расшифровать данные из одного источника и записать расшифрованные данные в файл.
try (FileInputStream fis = new FileInputStream(targetPath.toFile());
ReadableByteChannel channel = newDecryptedByteChannel(path, associatedData))
{
FileChannel fc = fis.getChannel();
long position = 0;
while (position < ???)
{
position += fc.transferFrom(channel, position, CHUNK_SIZE);
}
}
Реализация newDecryptedByteChannel(Path,byte[])
не должна представлять интереса, она просто возвращает ReadableByteChannel.
Проблема: Каково условие для завершения цикла while? Когда достигается «конец байтового канала»? transferFrom
правильный выбор здесь?
Этот вопрос может быть связан (ответ - просто установить счетчик на Long.MAX_VALUE
). К сожалению, это не помогает мне, потому что в документах сказано, что до количества байтов может быть передано в зависимости от природы и состояния каналов.
Другая мысль состояла в том, чтобы просто проверить, действительно ли количество переданных байтов равно 0 (возвращено из transferFrom
), но это условие может быть истинным, если исходный канал не является блокирующим и имеет меньше, чем число байтов, непосредственно доступных в его входной буфер.