Java IO整理概要

随着上一篇介绍Fork Join的文章结束,本阶段对Java并发的整理就先告一段落。其实关于Java并发开发还有很多很多内容,像Disruptor这种优秀的工具等,但不可能一一赘述。

从这篇开始,我会对Java的又一重要的基础点进行复习整理,那就是Java IO。

IO实际上就是input & output,解释起来就是输入和输出。对于一个完整的计算机系统,IO绝对是不可缺少的一部分。没有了IO,计算机也就没有了数据的源头和目标。IO在计算机系统中是复杂多样的,磁盘、网络、扫描、显示、打印等都是IO,对于一个特定的IO设备,通常我们的操作系统会有一个程序模块,就是驱动。也多亏了操作系统,封装了驱动等偏底层的内容,使得应用者还开发者可以以更通用的方式来看待复杂多样的输入输出。而无论是和操作系统层面关联更密切的C,还是有了JVM的高级语言Java,对IO的部分都进行了封装,屏蔽了底层的繁琐细节,而建立了抽象的模型,为上层开发提供了方便。

下面简要整理下,本篇以及后面一系列文章所要整理到的内容。

  • 字节流。java.io包中的InputStreamOutputStream两个类及各具体子类,这是Java IO发展过程当中最早就有的内容。
  • 字符流。java.io包中的ReaderWriter类以及具体子类。在字节流处理的基础上,封装了编码等内容,提供了字符级别的处理,更方便开发。
  • 文件处理。输入输出最基本的就是通过磁盘文件进行,Java IO中的文件处理也很重要。这其中包括File类的使用、FileInputStream/FileOutputStream、RandomAccessFile以及文件的映射和锁定等。
  • Socket相关。除了最基本的文件处理,企业级开发中网络的数据传输在Java IO中有很多要点,而对于网络的输入输出我们都是通过Socket以及其他java.net包中的类进行的。
  • NIO。这一内容是从JDK1.4开始正式新增的,包括java.nio和子包。所谓NIO,很多朋友的理解是non-blocking IO,但貌似更正式的解释是New IO,当然其中也具有了一些对非阻塞(non-blocking)的支持。在NIO中,Buffer和Channel是主要的角色。
  • Selector和IO复用。和NIO紧密结合,很多应用开发,尤其是对Socket数据通信相关的处理中,Selector发挥了很重要的作用,使得同一个线程可以处理多个连接发来的请求,节省了资源。
  • 序列化。其实在java.io包中还包含了像Serializable和Externalizable,目的就是方便进行和输入输出相关的序列化和反序列化操作。
  • Java 7 AIO。在JavaSE7的API和JDK1.7中,在java.nio.channels包中增加了一些和AIO相关的内容。
Java NIO

《Java NIO》封面

Java的JDK对IO的支持从1.0到1.1,再到1.4和1.7都有着很大的变化,目的就在于提高IO的性能和IO工具使用的方便性。可见Java IO的重要性,NIO同时成为了大量连接处理所采用的主要策略,这也成为了很多大公司面试官面试的重要题目。

要说的大概就这些,后面的文章会对这些一一整理。

作者原创,难免有错误,欢迎读者热心评论留言指出,以免误导他人,谢谢!

相关文章:

此条目发表在 IO, Java, Java语言, 开发, 计算机技术 分类目录,贴了 , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>