Android设备如何保证数据同步写入磁盘的实现

网友投稿 667 2023-07-23

Android设备如何保证数据同步写入磁盘的实现

Android设备如何保证数据同步写入磁盘的实现

在一些特定的工作场景中,我们把数据及时写出磁盘,而不是暂时保存在系统的文件缓存区,防止掉电导致数据丢失

/**

* Force all system buffers to synchronize with the underlying

* device. This method returns after all modified data and

* attributes of this FileDescriptor have been written to the

* relevant device(s). In particular, if this FileDescriptor

* refers to a physical storage medium, such as a file in a file

* system, sync will not return until all in-memory modified copies

* of buffers associated with this FileDescriptor have been

* written to the physical medium.

*

* sync is meant to be used by code that requires physical

* storage (such as a file) to be in a known state For

* example, a class that provided a simple transaction facility

* might use sync to ensure that all changes to a file caused

* by a given transaction were recorded on a storage medium.

*

* sync only affects buffers downstream of this FileDescriptor. If

* any in-memory buffering is being done by the application (for

* example, by a BufferedOutputStream object), those buffers must

* be flushed into the FileDescriptor (for example, by invoking

* OutputStream.flush) before that data will be affected by sync.

*

* @exception SyncFailedException

* Thrown when the buffers cannot be flushed,

* or because the system cannot guarantee that all the

* buffers have been synchronized with physical media.

* @since JDK1.gGJuKzpz1

*/

public native void sync() throws SyncFailedException;

可能一看到这个场景,很多人会想到数据库的事务,查看android数据库sqlite的源码可以看到,数据库事务只能保证n个操作,要么都执行,要么都不执行。数据库事务在所有操作完成后,会提醒文件系统与磁盘同步,但是不会等到所有系统缓冲区与磁盘同步完成才返回!

FileDescriptor.getFd().sync();会强制所有系统缓冲区与磁盘同步

File file = new File("/sdcard/a.txt");

try {

FileOutputStreahttp://m outputStream = new FileOutputStream(file);

outputStream.write("kuangxf".getBytes());

outputStream.flush();

//强制文件系统刷新

outputStream.getFD().sync();

} catch (Exception e) {

e.printStackTrace();

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot schedule 解决定时任务不执行的问题
下一篇:如何使用SpringSecurity保护程序安全
相关文章

 发表评论

暂时没有评论,来抢沙发吧~