#java #indexing #byte #filewriter
#java #индексирование #байт #filewriter
Вопрос:
Возможно ли сдвинуть содержимое файла во время записи в него с помощью FileWriter?
Мне нужно записать константы данных в начало файла, и если я это сделаю, это перезапишет файл.
Какой метод мне следует использовать для этого или я должен создавать копии файла (с новыми данными сверху) при каждой записи файла?
Ответ №1:
Если вы хотите перезаписать определенные байты файла, а не другие, вы можете использовать seek и write для этого. Если вы хотите изменить содержимое каждого байта в файле (например, добавив один байт в начало файла), то вам нужно записать новый файл и, возможно, переименовать его после завершения записи.
Подумайте об ответе на вопрос «каким будет содержимое байта со смещением x после того, как я закончу?». Если для большого процента возможных значений x ответ «не тот, что раньше», тогда вам нужен новый файл.
Ответ №2:
Вместо того, чтобы задаваться вопросом «каким будет содержимое байта со смещением x после того, как я закончу?», давайте изменим мышление и спросим, почему файловая система или, возможно, прошивка жесткого диска не могут: а) обеспечить другой режим доступа к файлу [скажем, встроенный] б) увеличить длину файла на количество байтов, добавленных спереди, в середине или даже в конце в) переместить каждый байт, начинающийся с пересечения, на newcontent .позиции длины
Было бы проще и быстрее обрабатывать эти операции на уровне встроенного ПО диска или файловой системы, а не оставлять эту работу разработчику приложения. Я надеюсь, что разработчики файловой системы или поставщики жестких дисков скоро предложат такую функцию.
С уважением, Samba