0

如果在写入过程中出现任何异常,是否可以回滚当前的 IO 操作?我正在尝试使用以下表达式将 UTF-8 字符串写入带有 Okio 库的文件

file.sink().buffer().writeUtf8(fileContent).close()

它适用于正常情况。但是如果在写入过程中发生异常,它只是将一个空字符串写入一个文件,覆盖现有的文件。

我知道我可以在写入之前备份旧内容,并在出现异常时覆盖在 catch 块中。但这看起来是一个常见问题,我想知道是否有任何替代解决方案可以解决这个问题。

谢谢!

4

1 回答 1

0

根据平台,您可以使用原子文件来确保数据完整性。

如果平台上不支持原子文件,您可以在写入成功后构建一些东西来替换旧文件。

不过,这是一项昂贵的操作。

这是 Android 的 AtomicFile 类:

https://developer.android.com/reference/android/util/AtomicFile

于 2020-09-17T07:30:19.373 回答