大家下午好。我想知道如何有效地从文件末尾删除x个字节?(追加的逆运算)
从原始文件中读取字节并将其写入新文件似乎并不正确(快速),尤其是在文件很大的情况下。
有没有办法设置文件长度?
或者更确切地说,"裁剪"文件的最佳方式是什么?
RandomAccessFile.setLength(long newLength)
我有两个答案。
-
如果您不想手动读取、截断和重写文件,但又不在乎这些操作是否会在幕后发生,那么可以使用
setLength(..)
,正如tzaman所指出的那样。 -
如果你不希望文件的字节被重写到新的磁盘位置(你只希望最后的字节在磁盘上标记为空闲(副作用:碎片)),我认为这是不可能的。您必须看看底层操作系统是否实现了这样的文件截断(通过与硬件交谈)。我还不熟悉这种选择。此外,有不同的JVM实现,并且不能保证它们如何在后台运行代码。
尽管后一种方法的最大问题是磁盘碎片。如果在某个地方整体重写文件,操作系统可能会有更好的方法来组织文件;但这要视情况而定。也许你可以为这个特定的应用程序编写自己的操作系统。)