Java NIO

流的类型

  • 字节流

    InputStream

    OutputStream

  • 字符流

    Reader

    Writer

流的分类

  • 节点流

    从特定地方读写的流类

    例:磁盘或一块内存区域

    设备打交道

  • 过滤流

    使用节点流作为输入或输出。

    过滤流是使用一个已经存在的输入流或输出流连接创建的。

    过滤流就是对已经存在的流进行包装

I/O库的设计原则

  • Java的I/O库提供一个称为链接的机制,可以将一个流于另一个流首尾相接,形成一个流管道的链接。

    这种机制使用了Decorator&Wrapper 装饰器的设计模式。

    (在不创造更多的子类的情况, 增加类的功能)

  • 通过流的的链接可以动态的增加一些功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的

Java NIO

NIO全称NoneBlocking IO, 非阻塞IO; 使用事件机制;

由Java 1.4 引入异步IO.

面向块(block)或是缓冲区(buffer)编程。

主要核心部分:

  • Channel

    可以向其写入数据或是从中读取数据的对象

    不直接通过Channel写入数据,直接从Channel读取数据的情况。

    Channel是双向,打开Channel后可以进行读取、写入(linux操作底层通道就是双向的)

  • Buffer

    本身就是一块内存, 底层实现上, 它实际上是数组。

    所有数据的读写都是通过buffer来实现的。

    提供了数组和数据结构化访问方式,并且可以追踪到系统的读写过程。

  • Selector