gpt4 book ai didi

Java:断言文件序列化完成?

转载 作者:行者123 更新时间:2023-12-01 16:50:42 25 4
gpt4 key购买 nike

我正在处理 Java 中的一个对象,该对象的计算成本非常高,而且大小有几兆字节。为了在应用程序重新启动时保留它,我想将其序列化为 File,并在启动时重新加载该文件(如果存在)。

问题是大多数文件系统都不是事务性的。文件写入过程可能会因异常、JVM 终止和/或电源故障而中断。我绝对需要断言的是,如果使用该文件,则其中的信息是完整的。我可以丢弃这些信息并在需要时重新计算,但必须避免阅读和依赖不完整的数据。

我的尝试是序列化并在文件末尾写入一个“密封”对象,例如校验和。反序列化过程中该对象的存在保证了序列化过程已完成。如果反序列化期间密封对象不存在,我知道我不能信任文件中的数据,因为它可能不完整。我正在寻找一种独立于操作系统的解决方案,并且不需要考虑恶意修改序列化文件内容的“攻击”。

我的问题是:上面概述的密封对象方法是否安全,或者是否仍然存在一些极端情况,我最终可能会在没有注意到的情况下读取不完整的文件?

最佳答案

只需用不同的临时名称写入文件即可。文件完成后,删除该文件的任何先前版本并将新文件重命名为真实名称。

如果程序在写入过程中终止,您只会得到一个不完整的临时文件。真实文件仍然像以前一样(或丢失),因此您永远不会看到要加载的不完整文件。

关于Java:断言文件序列化完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681208/

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