🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 一、理解 I/O 是输入和输出的简写,指的是数据在计算机内部和外部设备之间的流动。简单来说,当你从键盘输入数据、从鼠标选择操作,或者在屏幕上看到图像,这些都是 I/O 操作。它就像是计算机与外部世界沟通的桥梁,没有 I/O,计算机就不知道如何接收和发送信息。 当然,涉及I/O操作,不仅是硬件设备的读写I/O(磁盘I/O),而且还有网络的I/O(网络I/O)。总结来说I/O是处理人机交互、机与机交互的一套解决方案。 # 二、Java IO 分类 * 基于字节操作的 I/O 接口:InputStream 和 OutputStream * 基于字符操作的 I/O 接口:Writer 和 Reader * 基于磁盘操作的 I/O 接口:File * 基于网络操作的 I/O 接口:Socket 字节IO和字符IO主要是从传输数据的数据格式不同进行分组,而后两个磁盘和网络IO则是从传输数据的方式不同进行分组。数据格式和传输方式是影响效率的最关键因素。 # 三、基于字节操作的接口 ## 3.1 字节输入流( InputStream) InputStream 输入流的类继承层次如下图所示: ![](https://img.kancloud.cn/86/41/86419b6c6c4d9570d2554550da96ec19_1080x345.png) 输入流根据数据节点类型和处理方式,分别可以划分出了若干个子类,如下图: ![](https://img.kancloud.cn/1e/9f/1e9fdabac50d4b3dec96fb5af865f568_1080x495.png) ## 3.2 字节输出流(OutputStream) OutputStream 输出流的类继承层次如下图所示: ![](https://img.kancloud.cn/cb/e5/cbe5dba20a3cfd0ddc6e0452b35d3412_1080x336.png) 输出流根据数据节点类型和处理方式,也分别可以划分出了若干个子类,如下图: ![](https://img.kancloud.cn/05/d6/05d61b3486db654c3d6eed11366b6db7_1080x537.png)