Java открытый поток из произвольного места в файле
Я хочу получить поток из некоторой произвольной позиции в существующем файле, например, мне нужно читать / записывать из / в файл, начиная с 101-го байта. Безопасно ли использовать что-то подобное?
final FileInputStream fin = new FileInputStream(f);
fin.skip(100);
Пропустить Javadoc говорит, что иногда может пропустить меньшее количество байтов, чем указано. Что мне тогда делать?
2 ответа
Как насчет следующего:
final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin
Вы не можете писать, используя FileInputStream. вам нужно использовать RandomAccessFile, если вы хотите записать в произвольные места в файле. к сожалению, не существует простого способа использовать RandomAccessFile в качестве InputStream/OutputStream (похоже, у @aix может быть хорошее предложение по адаптации RandomAccessFile к InputStream/OutputStream), но есть несколько примеров адаптеров, доступных онлайн.
Другой альтернативой является использование FileChannel. Вы можете установить положение FileChannel напрямую, а затем использовать служебные методы Channels, чтобы получить адаптеры InputStream/OutputStream поверх Channel.