什么是IO流
IO流即是in和out,即为输出与输入,指的是程序与外部设备的联系
什么是流
是一种抽象的概念,是一种连续的数据和字符字节以先进先出的方式发送信息的通道
当程序需要读取数据时,就会开启一个通向数据的流,这个数据可以是文件,内存,或者是网络链接,当程序需要数据时,就会开启一个通向目的地的流,这时就可以想象数据在通道中流动
特性:
1.先进先出:最先写入数据流的数据最先被读取
2.顺序存取:可以一个接一个的写入一串字节,读取时也可以一个接一个的按顺序读取,不可以只读取中间的某一个
3.只读只写:每个流的功能只能是只读或只写,不能是即可以读也可以写
输入流和输出流
输入与输出是相对于应用程序而言的,比如文件读写,读取文件是输入流,写文件是输出流,这点很容易搞反
节点流和处理流
节点流:也称低级流,是真实连接在程序与另一端的管道,负责实际的读写数据的流
读写一定是建立在节点流的基础上的
节点流好比家里的自来水管,连接我们家庭和自来水厂,负责运水
处理流:也称高级流,不能独立存在,必须连接在其他流上,目的是当数据经过当前时对其加工处
理,简化我们对数据的同等加工,可以比作净水器,可以对水进行加工处理
实际上开发我们经常会串联一组高级流最终连接到低级流上,在读写操作时以流水线的加工完成复杂的IO操作,这个过程也称为流的连接
缓冲流
缓存流的flush方法用于强制将缓存区中已经缓存的数据一次性写出
对象流
java.io.objectOutputputStream和objectSteam
对象流是一对高级流,在流连接中的作用是进行对象的序列化于反序列化
对象序列化:将一个java对象按照其结构转换为一组字节的过程
反序列化:将一组字节还原为java对象(前提是这组字节是一个对象序列化得到的字节)