Java открытый поток из произвольного места в файле - PullRequest
1 голос
/ 18 октября 2011

Я хочу получить поток из некоторой произвольной позиции в существующем файле, например, мне нужно читать / записывать из / в файл, начиная с 101-го байта.Безопасно ли использовать что-то подобное?

final FileInputStream fin = new FileInputStream(f);
fin.skip(100);

Пропустить javadoc говорит о том, что иногда может пропускаться меньшее количество байтов, чем указано.Что мне тогда делать?

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

Вы не можете писать, используя FileInputStream. вам нужно использовать RandomAccessFile, если вы хотите записать в произвольные места в файле. К сожалению, не существует простого способа использовать RandomAccessFile в качестве InputStream / OutputStream (похоже, у @aix может быть хорошее предложение для адаптации RandomAccessFile к InputStream / OutputStream), но в Интернете есть различные примеры адаптеров.

другой альтернативой является использование FileChannel. Вы можете установить положение FileChannel напрямую, а затем использовать служебные методы Channels, чтобы получить адаптеры InputStream / OutputStream поверх Channel.

1 голос
/ 18 октября 2011

Как насчет следующего:

final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin
...