有几个高质量的框架隐藏了基于 NIO 的网络编程的复杂性(mina、netty、grizzly 等)。是否有类似的框架可以简化基于 NIO 的文件系统编程?
例如,作为学习练习,我想基于这篇(太棒了!)文章实现一个磁盘支持的映射:http://www.javaworld.com/javaworld/jw-01-1999/jw-01-step.html .
最佳答案
没有(但是...)
但那是因为Java的NIO FileChannel和 MappedByteBuffer不像网络和 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/