【发布时间】:2012-01-22 04:39:10
【问题描述】:
大家下午好。我想知道我们如何有效地从文件末尾删除 x 个字节? (追加的逆运算)
从原始文件读取字节并将它们写入新文件似乎并不正确(快速),尤其是在文件很大的情况下。
有没有办法可以设置file length?
或者更确切地说,“裁剪”文件的最佳方式是什么?
【问题讨论】:
-
我认为只有当操作系统像这样管理文件截断时(并且如果它允许外部调用者访问可能是内核)
大家下午好。我想知道我们如何有效地从文件末尾删除 x 个字节? (追加的逆运算)
从原始文件读取字节并将它们写入新文件似乎并不正确(快速),尤其是在文件很大的情况下。
有没有办法可以设置file length?
或者更确切地说,“裁剪”文件的最佳方式是什么?
【问题讨论】:
【讨论】:
RandomAccessFile.setLength 是我们最好的选择吗?
我有 2 个答案给你。
如果您不想手动读取、截断和重写文件,但不关心这些操作是否可能在幕后发生,您可以使用@987654321 @正如 tzaman 指出的那样。
如果您不希望文件的字节被重写到新的磁盘位置(您只希望末尾的字节在磁盘上标记为空闲(副作用:碎片)),我不认为这是可能的。您必须查看底层操作系统是否实现了这样的文件截断(通过与硬件交谈)。我还不熟悉这些选项。此外,还有不同的 JVM 实现,无法保证它们如何在幕后运行您的代码。
虽然后一种方法的最大问题是磁盘碎片。如果将文件作为一个整体重写,操作系统可能有更好的方法来组织文件;但这取决于。也许您可以为这个特定的应用程序编写自己的操作系统。 ;)
【讨论】: