用于文件系统而不是网络的 Java NIO 框架?

标签 java map filesystems nio persistent

有几个高质量的框架隐藏了基于 NIO 的网络编程的复杂性(mina、netty、grizzly 等)。是否有类似的框架可以简化基于 NIO 的文件系统编程?

例如,作为学习练习,我想基于这篇(太棒了!)文章实现一个磁盘支持的映射:http://www.javaworld.com/javaworld/jw-01-1999/jw-01-step.html .

最佳答案

没有(但是...)

但那是因为Java的NIO FileChannelMappedByteBuffer不像网络和 Selector 那样复杂或难以理解和使用东西java.nio

这是一个创建适合您练习的磁盘支持映射(在 NIO 领域称为“映射字节缓冲区”)的示例:

File file = new File("/Users/stu/mybigfile.bin");
FileChannel fc = (new FileInputStream(file)).getChannel(); 
MappedByteBuffer buf = fc.map(MapMode.READ_WRITE, 0, file.length());

您可以像访问任何其他缓冲区一样访问缓冲区 Buffer .数据在磁盘和内存之间神奇而快速地移动,所有这些都由 Java 和底层操作系统的虚拟内存管理系统管理。不过,您确实对此有一定程度的控制。例如:MappedByteBuffer 的 .force() (“强制将对此缓冲区内容所做的任何更改写入包含映射文件的存储设备。”)和 .load() (“将此缓冲区的内容加载到物理内存中。”)我个人从来不需要这些。

关于用于文件系统而不是网络的 Java NIO 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1129006/

相关文章:

java - 如何使用java检查字符串中的所有字符是否为小写

c++ - 关于意外断电的原子写入

java - hadoop 2.3.0 源码构建错误

java - onPreExecute方法没有被调用

c++ - 如何统一初始化 unique_ptr 的映射?

data-structures - VB map 数据结构

c++ - 在 3 元素映射 C++ 中添加新项目并使用时间键搜索

filesystems - 如何评估文件系统?

linux - 繁忙的 NFS 上没有此类文件或目录

java - 为什么我的玩家会从平铺 map 中掉下来?