java - MappedByteBuffer中的 "put"和 "force"有什么区别?

标签 java

从 FileChannel 获取 MappedByteBuffer 后,我在该缓冲区上使用 put 方法,例如: buffer.put((byte)'a') 然后我发现文件内容是一个字符“a”。与MappedByteBuffer中的“force”方法相同。 “放置”和“强制”有什么不同吗?

最佳答案

put() 将数据存储在缓冲区中,force() 告诉操作系统将缓冲区刷新到磁盘。

在现代操作系统中,您将无法通过查看文件来检测 force() 的结果,因为对同一文件的单独引用共享底层操作系统缓冲区。您可以通过在 put() 之后立即断电来检测差异,因为操作系统不会立即将更改写入磁盘。

不建议频繁调用 force(),因为它 (1) 会导致上下文切换到内核,并且 (2) 会占用您的 IO channel 。

另请注意,force() 并不能保证数据将位于磁盘上,因为磁盘驱动器有自己的缓冲区缓存。在操作系统认为数据已写入之后、驱动器将数据从缓存移动到盘片之前,完全有可能断电。

关于java - MappedByteBuffer中的 "put"和 "force"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284724/

相关文章:

java - RestTemplate 和 ResponseErrorHandler : Elegant means of handling errors given an indeterminate return object

java - GWT:将用户转发到 URL

java - 如何使用 Java 和 Maven 实现 Microsoft Graph API

java - 更改 list 后 - 主题错误

java - 使用什么编程语言来开发Java?

java - 与 JComboBox 相关的问题

java - 比较两个字符串的字符的基本java代码

Java Vector<E> 在没有明显原因的情况下被阻止

Java 文本文件 I/O 位置

java - Jackson 与 JodaTime 和 Jax-rs