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.

Другие вопросы по тегам