您当前位置:资讯中心 >服务器 >浏览文章

一篇带你彻底读懂 IO 流技术!

来源:互联网 日期:2023/6/26 0:26:40 阅读量:(0)

一、摘要

说到 IO,相信大家都不陌生,英文全称:Input/Output,即输入/输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。

比如我们常用的SD卡、U盘、移动硬盘等等存储文件的硬件设备,当我们将其插入电脑的 usb 硬件接口时,我们就可以从电脑中读取设备中的信息或者写入信息,这个过程就涉及到 I/O 的操作。

当然,涉及 I/O 的操作,也不仅仅局限于硬件设备的读写,还有网络数据的传输。比如,我们在电脑上用浏览器搜索互联网上的信息,这个信息的过程也涉及到 I/O 的操作。

无论是从磁盘中读写文件,还是在网络中传输数据,可以说 I/O 主要为处理人机交互、机与机交互中获取和交换信息提供的一套解决方案。

在 Java 的 IO 体系中,类将近有 80 个,位于java.io包下,初步看起来感觉非常复杂,但是经过一番梳理之后,你会发现还是有规律可循的。

从传输数据的格式角度看,可以大致分为两组:

  • 基于字节操作的 I/O 接口:InputStream 和 OutputStream
  • 基于字符操作的 I/O 接口:Reader 和 Writer

从传输数据的方式角度看,也可以大致分为两组:

  • 基于磁盘操作的 I/O 接口:File
  • 基于网络操作的 I/O 接口:Socket

虽然 Socket 类并不在java.io包下,但是我们仍然把它们划分在一起,因为 I/O 的核心问题,要么是数据格式影响 I/O 操作,要么是传输方式影响 I/O 操作,也就是将什么样的数据写到什么地方的问题。

I/O 只是人与机器或者机器与机器交互的手段,除了在它们能够完成这个交互功能外,我们关注的就是如何提高它的运行效率,而数据格式和传输方式是影响效率最关键的因素。

下面我们基于这两点,来展开分析!

二、传输格式的分类

从传输格式角度看,可以分两类:字节流和字符流。

  • 基于字节的输入和输出操作接口分别是:InputStream 和 OutputStream
  • 基于字符的输入和输出操作接口分别是:Reader 和 Writer 。

图片

2.1、字节流接口

字节流,是 I/O 流中最底层的流,能处理任何类型的数据传输,比如文字、图片、视频、文件等。

2.1.1、基于字节输入流的接口

打开 JDK 源码,整理之后,InputStream 输入流接口的类继承层次如下图所示:

图片

这些输入流类,根据角色不同,还可以进行分类,分为:节点流和处理流。

  • 节点流:指的是向指定的设备,比如磁盘、网络,进行读/写数据,也被称为底层流,直接和数据源相接
  • 处理流:指的是在已存在的节点流或者处理流基础上,包装一些更加方便操作 io 流的功能,比如压缩、序列化、缓冲操作等,也被称为包装流

输入流类,根据角色的划分类别如下:

图片

OutputStream 输出流的类层次结构也是类似。

2.1.2、基于字节输出流的接口

OutputStream 输入流接口的类继承层次如下图所示:

图片

字节输出流类,根据角色的划分类别如下:

图片

这里就不详细的介绍各个子类的使用方法,有兴趣的朋友可以查看 JDK 的 API 说明文档,笔者也会在后期的系列文章会进行详细的介绍。

这里只是重点想说一下,无论是输入还是输出,操作数据的方式可以组合使用,各个处理流的类并不是只操作固定的节点流,比如如下输出方式:

//将文件输出流包装到序列化输出流中,再将序列化输出流包装到缓冲中
OutputStream out = new BufferedOutputStream(new ObjectOutputStream(new FileOutputStream(new File("fileName")));
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。