gpt4 book ai didi

java - 有没有更好的方法来覆盖文件内容?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:19 24 4
gpt4 key购买 nike

我想覆盖一个已经存在的文件的内容。显然,我可以根据 this answer 创建一个覆盖旧文件的新文件。 .但是,我正在编写一个可能会多次执行此操作的程序,我想尽可能减少不必要的开销。

所以我的问题是:是否有更好的方法来简单地重写文件本身的内容,而不是编写一个"new"文件来替换旧文件?或者简单地覆盖整个文件内容的开销是否大致相当于创建新文件然后写入的开销? (为了记录,这些文件只有 1 KB 大。)

最佳答案

简短的回答:写两个和个人资料。

更长的答案,需要大量的挥手:

覆盖文件将涉及以下系统调用:

open
write
close

新建文件、删除旧文件、重命名新文件会涉及到以下系统调用:

open
write
close
unlink
rename

系统调用通常是程序中最慢的部分;一般来说,减少系统调用是加速程序的好方法。覆盖一个文件将重新使用操作系统的内部目录条目数据;这也可能会导致一些速度改进。 (它们可能很难用具有 VM 开销的语言来衡量......)

您的文件足够小,每个 write() 都应该以原子方式处理,假设您要在一次写入中更新整个 1K。 (既然你关心性能,这似乎是一个安全的假设。)这确实意味着其他进程不应该看到部分写入,除非发生灾难性电源故障和有损安装选项。 (不常见。)即使面对多次写入,文件重命名方法也能提供一致的文件。

但是,1K 文件是一种非常低效的存储机制;许多文件系统将沿着 4k block 写入文件。如果这些数据 block 仅存在于您的应用程序中,那么将它们写入某种容器 中可能是有意义的,一次写入多个。 (Quake 派生系统这样做是为了从 zip 文件中读取它们的 map 、纹理等,因为巨大的流式 IO 请求比成千上万的小 IO 请求快得多。)当然,如果您的应用程序正在编写,这会更难这些文件供其他应用程序使用,但如果这些文件很少共享,可能仍值得调查。

关于java - 有没有更好的方法来覆盖文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11253843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com