Java Open Stream из произвольного места в файле

StackOverflow https://stackoverflow.com/questions/7810151

  •  26-10-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Другая альтернатива - использовать FileChannel. Вы можете напрямую установить положение FileChannel, а затем использовать методы утилиты каналов, чтобы получить адаптеры inputstream/outputstream поверх канала.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top