JDK-java.nio包详解
概述
一直以来Java三件套(集合、io、多线程)都是最热门的Java基础技术点,我们要深入掌握好这三件套才能在日常开发中得心应手,之前有编写集合相关的文章,这里出一篇文章来梳理一下io相关的知识点。
一、源码包简单介绍
JDK中io有两类包:io、nio,其中IO使用流的方式处理文件,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两大类。NIO采用内存映射文件来处理输入输出,NIO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样来访问文件了。Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。其中io和nio的区别如下:
1、io核心概念
(1)输入输出流
输入流以InputStream和Reader作为基类,而输出流以OutputStream和Writer作为基类。
(2)字节流和字符流
字节流:InputStream,OutputStream
字符流:Reader,Writer
2、nio核心概念
(1)Channel(通道):Channel是对传统的输入输出系统的模拟,在NIO系统中所有的数据都需要通过通道传输。
(2) Buffer(缓冲区):缓冲区(Buffer)是一个包含数据(通常是原始数据如字节)的容器,并提供了一组方法,用于追踪和操作缓冲区中的数据。本质是一个数组,发送到Channel中所有的对象都必须首先放到Buffer中,从Channel中读取的数据也必须先放到Buffer中。
(3)Selector(选择器): 一般称 为选择器 ,当然你也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。
二、源码包中核心类设计
1、io包核心类设计
前面讲到io流主要分为输入输出流,而输入输出流又分为字符流和字节流,下面我们先看一下输入流的类设计:
如下图所示是输出流核心类设计:
2、nio包核心类设计
上面讲到nio有三个核心类:Channel(通道)、Buffer(缓冲区)、Selector(选择器),而这三个核心类的设计如下图所示:
总结
本文介绍了Java io流的核心设计,java1.4之前只提供了io流的模式,之后推出了nio,文中也对io和nio做了简单的对比。第二小节是对io和nio中核心类的设计做了总结归纳,大家在看jdk的源码过程中可以参考。本文未涉及实例应用以及源码分析,等总结归纳好之后再进行这方面的文章编写。