精通IO模型之路(二)--IO模型

IO模型

IO模型的分层:java层次和Linux系统层次

  • java:BIO、NIO、AIO
  • Linux:阻塞IO模型、非阻塞IO模型、IO复用模型、信号驱动IO模型以及异步IO模型。
    精通IO模型之路(二)--IO模型_第1张图片
    分享一篇文章:图解IO模型
java IO模型受限于操作系统

java的IO模型受限于操作系统,java程序跑起来,对Linux系统而言也是一个普通的系统,让我觉得很有意思的是java有个JVM,有自己管理的堆空间。对于java进程而言还有个直接内存Direct Memory。
在JDK1.4新加入了NIO,可以使用Native函数库直接分配堆外内存,有些场景避免了java堆和Native堆的来回复制从而提高性能。当然,不管是HeapByteBuffer还是DirectByteBuffer都逃不过系统调用的命运。

基于文件的java IO

java.io将流分为了两类:

  • 节点流:又称为低级流,是实际连接数据源与程序的"管道",负责实际搬运数据。读写一定是建立在节点流的基础上进行的。(文件流是典型的的节点流)
  • 处理流:不能独立存在(没意义),必须连接在其他的流上,这样当数据"流经"当前流时,可以对这些数据做某种加工处理,简化我们对数据的加工操作

精通IO模型之路(二)--IO模型_第2张图片
fos:FileOutputStream最终写到磁盘的是字节。每写一次调一次system call write()
osw:OutputStreamWriter转换流,java.io.Writer所有字符输出流的超类
bw:BufferedWriter带缓冲,减少system call,但是丢数据。
pw:PrintWriter自带刷新
使用若干高级流串联并最终连接到低级流上,对读写的数据做流水线式的加工处理,这样的操作称为流的连接,很精髓的东西。

基于网络的java IO

你可能感兴趣的:(Java)