Java 磁盘文件 IO
磁盘文件 IO
磁盘文件的 IO 主要分为三种标准缓冲 IO、直接 IO、异步 IO。
JAVA API 中主要实现都是基于标准缓冲 IO,该种 IO 使用了内核内存中的 PageCache。
对比分析:
缓冲 IO
系统根据空间局部性,进行了预读功能,在一些需要连续访问磁盘数据块时,比较友好
直接 IO
没有预读优化:未经过内核 PageCache
读取快,无需内核态与用户态内存拷贝
异步 IO
非阻塞,将文件读取中的系统阻塞调用改为非阻塞,并发较好
JAVA API 对各种 IO 支持
标准 IO(缓冲 IO)
读文件:FileInputStream、FileReader
写文件:FileOutputStream、FileWriter
直接 IO
java api 暂不支持
需要的话,必须通过 jni 调用 c 库
异步 IO
java.nio.AsynchronousFileChannel 抽象类,nio 包下未提供具体实现
附录
《java 文件读写(磁盘 IO 机制详解)》
https://blog.csdn.net/Bmouth_monkey/article/details/87370577
《5 分钟搞懂 Linux 中直接 I/O 原理》
https://cloud.tencent.com/developer/news/406991
《磁盘 IO:缓存 IO 与直接 IO》
版权声明: 本文为 InfoQ 作者【彬】的原创文章。
原文链接:【http://xie.infoq.cn/article/031e72cb5468abf91e19619a1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论