有没有一种有效的方法来"crop"文件(从尾部删除 x 个字节)?



大家下午好。我想知道如何有效地从文件末尾删除x个字节?(追加的逆运算)

从原始文件中读取字节并将其写入新文件似乎并不正确(快速),尤其是在文件很大的情况下。

有没有办法设置文件长度?

或者更确切地说,"裁剪"文件的最佳方式是什么?

RandomAccessFile.setLength(long newLength)

我有两个答案。

  • 如果您不想手动读取、截断和重写文件,但又不在乎这些操作是否会在幕后发生,那么可以使用setLength(..),正如tzaman所指出的那样。

  • 如果你不希望文件的字节被重写到新的磁盘位置(你只希望最后的字节在磁盘上标记为空闲(副作用:碎片)),我认为这是不可能的。您必须看看底层操作系统是否实现了这样的文件截断(通过与硬件交谈)。我还不熟悉这种选择。此外,有不同的JVM实现,并且不能保证它们如何在后台运行代码。

尽管后一种方法的最大问题是磁盘碎片。如果在某个地方整体重写文件,操作系统可能会有更好的方法来组织文件;但这要视情况而定。也许你可以为这个特定的应用程序编写自己的操作系统。)

最新更新