Java 如何在android中备份电池上的数据?

Java 如何在android中备份电池上的数据?,java,android,file,file-io,backup,Java,Android,File,File Io,Backup,我正在开发一个将数据写入文件的应用程序。假设在写入数据时,我们将电池拔出。文件会发生什么变化?它是半写(损坏)、空的还是和我们之前写的一样?我猜它会被破坏。当文件存储对象的arraylist时,如何在重新启动手机时检查它是否已损坏?java是否会引发损坏的文件异常,或者说读取arraylist为null,或者它是未知对象 另外,是否可以创建另一个文件来保存数据文件的MD5校验和?每当我首先写入文件数据时,我会生成它的校验和,然后当我从数据文件读取时,我会生成一个校验和,并将它与前一个进行比较。这

我正在开发一个将数据写入文件的应用程序。假设在写入数据时,我们将电池拔出。文件会发生什么变化?它是半写(损坏)、空的还是和我们之前写的一样?我猜它会被破坏。当文件存储对象的arraylist时,如何在重新启动手机时检查它是否已损坏?java是否会引发损坏的文件异常,或者说读取arraylist为null,或者它是未知对象


另外,是否可以创建另一个文件来保存数据文件的MD5校验和?每当我首先写入文件数据时,我会生成它的校验和,然后当我从数据文件读取时,我会生成一个校验和,并将它与前一个进行比较。这将指示我的数据是否完整,但它不允许我回滚到以前的状态(预损坏状态)。我想要一个尽可能轻量级的方法,我已经在使用CPU太多了,每次属性更改都会对我的存储进行读/写更改,总共有数千次。可能数据库会是一个更好的主意。

我不能说Java将如何读取损坏的序列化数组,但为了安全起见,让我们假设没有错误检测

在这种情况下,您有两个简单的选择:

  • 在序列化数据结构之前,将数据的校验和存储在数据结构中
  • 计算最终序列化文件的校验和
这两种情况的工作方式都是一样的,不过第一种方法可能会快一点,因为在将任何内容写入磁盘之前计算校验和(从而避免额外的一轮文件I/O)

正如你所提到的,这样做很好。(即使是一个基本的也可以——您不需要加密哈希来实现这一点。)

如果您想允许回滚到以前的版本,我只需将每个版本存储为一个单独的文件,然后使用指向最新版本的指针。(如果将指针更新为写入操作的最后一步,这也将提供额外级别的保护,防止输入到应用程序的损坏数据——不过,您还必须为该指针损坏做好准备。由于这本质上是一个提交步骤,您可以将损坏的指针解释为“使用最新版本”。)

是的,此时您可能只想使用Android内置的SQLite功能。:)