Попытка перезаписать данные в середине файла, не влияя на начало файла

1

У меня есть алгоритм, который вычисляет компоненты (байты) вектора вне порядка. Я храню вектор в файле, поскольку, когда я запускаю его для реального, вектор будет иметь длину в миллионы байтов. Но в качестве упрощенного примера я хотел бы начать с пустого файла:

-1 -1 -1 -1 -1 -1 -1 -1

Тогда мой алгоритм будет заполнять два значения за раз:

-1 -1 4 7 -1 -1 -1 -1

тогда

-1 -1 4 7 -1 -1 3 9

и т.д. до тех пор, пока все значения не будут заполнены. Возможно ли это сделать? Я пробовал использовать файлы с произвольным доступом, но когда вы используете метод seek(), он заполняет 0s для всех значений перед теми, которые я хочу редактировать, удаляя любые предыдущие вычисления, выполненные моим алгоритмом. Поскольку мне нужна эта программа для работы с большими последовательностями чисел, вытащить весь файл в память не вариант. Есть идеи?

  • 0
    Посмотрите на это: meta.stackexchange.com/questions/66377/what-is-the-xy-problem Затем обновите свой вопрос, пожалуйста! :)
  • 0
    Да, это возможно сделать. Хитро, но возможно. Прежде всего, вы должны открыть файл как RandomAccessFile. RAF будет обрабатывать большую часть «бумажной работы», но вы должны быть очень осторожны, чтобы соответствовать тому, что спецификация говорит для своих операций.
Теги:
file
overwrite
randomaccessfile
large-files

2 ответа

0

Большинство файловых систем не являются действительно случайным доступом, поэтому с практической точки зрения трудно или невозможно изменить середину файла, не читая весь файл и не записывая его на диск. Вероятно, вам нужно будет читать в файле по одной секции за раз, соответствующим образом отредактировать этот раздел, а затем записать его обратно во временный файл. После того, как вы закончите, вы можете заменить исходный файл на временный файл.

0

На самом деле это не просто предложение. Извините, я не могу комментировать статусы

Откройте файл. Сохраните эти значения в памяти небольших фрагментов одновременно, а затем просто напишите в другой файл, освободив память и прочее в пути

Ещё вопросы

Сообщество Overcoder
Наверх
Меню