Есть ли эффективный способ "обрезать" файл (удалить х число байтов из хвоста)? - PullRequest
1 голос
/ 22 января 2012

Добрый день всем. Мне было интересно, как мы можем эффективно удалить х число байтов из конца файла? (обратная операция добавления)

Чтение байтов из исходного файла и запись их в новый файл просто не кажется правильным (быстрым), особенно если файл огромен.

Есть ли способ, которым мы могли бы установить длину файла ?

А точнее, как лучше всего "обрезать" файл?

Ответы [ 2 ]

2 голосов
/ 22 января 2012
1 голос
/ 22 января 2012

У меня есть 2 ответа для вас.

  • Если вы не хотите вручную читать, обрезать и перезаписывать файл, но вам все равно, если эти операции могут произойти за кадром, вы можете использовать setLength(..) как указал Цаман.

  • Если вы не хотите, чтобы байты файла когда-либо переписывались в новое место на диске (вы просто хотите, чтобы байты в конце были помечены как свободные на диске (побочный эффект: фрагментация)), Я не думаю, что это возможно. Вы должны увидеть, реализует ли базовая ОС усечение файла следующим образом (поговорив с оборудованием). Я пока не знаком с такими вариантами. Кроме того, существуют разные реализации JVM, и нет никакой гарантии, что они будут выполнять ваш код за кулисами.

Хотя самой большой проблемой последнего подхода является фрагментация на диске. У ОС могут быть лучшие способы организации файлов, если они переписаны где-то в целом; но это зависит. Может быть, вы можете написать свою собственную ОС для этого конкретного приложения. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...