一、什么是IO

IO从英文的角度看就是Input和Output,例如你把电脑上插入一个U盘,可以把视频拷贝到你的电脑硬盘中,那么数据都是在哪些设备上呢?键盘,内存,硬盘,外接设备上等等。我们把这种数据传输看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入流Input和输出流Output,即流向内存的输入流,流出内存的是输出流。

java中的IO操作主要是针对Java.io包下的内容。进行输入输出操作,输入也叫读取数据,输出也叫写入数据。

851080928_53643.png

二、IO分类

IO概述 - 图2
定义:

(1)节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader。
(2)处理流(用来包装节点流):是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

区别与联系:**
(1)节点流是低级流,直接跟数据源相接。
   处理流(也叫包装流)把节点流包装了一层,属于修饰器设计模式,不会直接与数据源相连,通过处理流来包装节点流既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。

(2)处理流的功能主要体现在以下两个方面:
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
2.操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的内容,而不是输入/输出一个或多个水滴处理流可以嫁接在任何已存在的流的基础上。

三、一切皆为字节

一切文件数据(文本,图片,视频)在进行存储时,都是以二进制的形式保存,都是一个一个的字节,那么传输时一样如此,所以,字节流可以传输任意的文件。在操作流的时候,我们要时刻明确,无论什么样的流对象,底层都是使用的是二进制数据进行传输。