Сдвигать файл во время записи?

#java #indexing #byte #filewriter

#java #индексирование #байт #filewriter

Вопрос:

Возможно ли сдвинуть содержимое файла во время записи в него с помощью FileWriter?
Мне нужно записать константы данных в начало файла, и если я это сделаю, это перезапишет файл.
Какой метод мне следует использовать для этого или я должен создавать копии файла (с новыми данными сверху) при каждой записи файла?

Ответ №1:

Если вы хотите перезаписать определенные байты файла, а не другие, вы можете использовать seek и write для этого. Если вы хотите изменить содержимое каждого байта в файле (например, добавив один байт в начало файла), то вам нужно записать новый файл и, возможно, переименовать его после завершения записи.

Подумайте об ответе на вопрос «каким будет содержимое байта со смещением x после того, как я закончу?». Если для большого процента возможных значений x ответ «не тот, что раньше», тогда вам нужен новый файл.

Ответ №2:

Вместо того, чтобы задаваться вопросом «каким будет содержимое байта со смещением x после того, как я закончу?», давайте изменим мышление и спросим, почему файловая система или, возможно, прошивка жесткого диска не могут: а) обеспечить другой режим доступа к файлу [скажем, встроенный] б) увеличить длину файла на количество байтов, добавленных спереди, в середине или даже в конце в) переместить каждый байт, начинающийся с пересечения, на newcontent .позиции длины

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

С уважением, Samba