io类库

io类库

java.io类库如此庞大,怎么才能全面系统的掌握它?

相对于其他Java基础知识,大部分程序员对Java I/O可能没那么了解,毕竟平时的工作很少会编写I/O相关的代码,比如读写文件、网络编程等。跟Java容器类似,java.io类库,也非常庞大,如此多类看得眼花缭乱,想要清晰的掌握,需要对其有个系统性的认识。本节,我就带你一块剖析一下java.io类库,给你构建一个java.io类库的全景图。

一、io类库整体结构


Mr.Zhang12/9/2022Java IO大约 13 分钟
NIO库类

NIO库类

BIO、NIO、AIO三种Java I/O模型的实现原理和区别

Java中的I/O类库除了java.io之外,还包括java.nio。既然已经有了java.io了,为什么还要再开发一个新的java.nio呢?java.nio跟java.io有何区别?在平时的开发中,什么时候使用java.io?什么时候使用java.nio?面试中常被问到的BIO、NIO、AIO又是什么东西?带着这些问题,我们来学习本节的内容:java.nio。


Mr.Zhang12/9/2022Java IO大约 18 分钟
高速I/O(上)

高速I/O(上)

普通的I/O读写流程都存在哪些性能问题?

前两节,我们介绍了IO类库和NIO类库,尽管在平时的业务开发中,我们很少会用到它们,但是,对于一些常用中间件、基础系统,比如Kakfa、RocketMQ、MySQL等,其内部实现涉及大量的文件和网络等I/O读写操作。I/O读写是否高效,直接决定了这些中间件和基础系统的性能,是优化的重中之重。I/O读写的优化方式,也是面试中经常被问及的知识点。

关于高速I/O,我们分两节来讲解。本节,我们介绍普通I/O读写的底层实现原理,让你知道I/O读写慢在哪,下一节,我们介绍提高I/O读写速度的方法,让你知道如何让它快。


Mr.Zhang12/9/2022Java IO大约 15 分钟
高速I/O(下)

高速I/O(下)

mmap和零拷贝是如何提高I/O读写速度的?

上一节,我们介绍了I/O读写的底层实现原理,不管读还是写,即便存在DMA,都需要进行2次数据的拷贝和1次系统调用,而1次系统调用又会导致2次用户态和内核态的上下文切换。这也是普通I/O读写值得优化的地方,本节,我们就讲一讲如何利用mmap和零拷贝技术,来提高I/O读写速度。

一、mmap

mmap(memory-mapped file,内存映射文件)是提高文件读写性能的有效技术。注意,mmap一般用于文件,像网络这种数据未知的I/O设备,不适合使用mmap。


Mr.Zhang12/9/2022Java IO大约 10 分钟