IO的分类
-
根据流的流向,可以将流分为输入流(InputStream)和输出流(OutputStream)。输入流负责从外部读取数据到程序中,而输出流负责将程序中的数据输出到外部。
-
根据操作单元,可以将流分为字节流(Byte Stream)和字符流(Character Stream)。字节流按字节读写数据,常用于处理二进制数据;字符流按字符读写数据,常用于处理文本数据,内部会根据指定的字符编码进行转换。
-
根据流的角色,可以将流分为节点流(Node Stream)和处理流(FilterStream)。节点流是直接与数据源或目标进行连接的流,例如FileInputstream 和 File0utputstream 是直接连接文件的节点流。处理流是通过包装其他流来提供额外功能的流,例如BufferedInputstream和Bufferedoutputstream是增加了缓冲功能的处理流,它们可以提高读写的效
I/O 这里的I和O指的是输入与输出
-
输入:Input 用来读取数据的
-
输出:Output 用来写出数据的
流的概念
java将输入输出比喻为"流",英文:Stream
字节流(节点流/低级流)
超类
java.io.InputStream是所有字节输入流的超类,里面定义了所有字节输入流都必须具备的读取字节的方法
java.io.OutputStream是所有字节输出流的超类,里面定义了所有字节输出流都必须具备的写出字节的方法
文件流
文件流是用来链接我们的程序与文件之间的"管道",用来读写文件数据的流。
文件流分为
-
文件输入流java.io.FileInputStream:读取文件数据的流
-
文件输出流java.io.FileOutputStream:写入文件数据的流
-
文件流是继承自InputStream和OutputStream
处理流/高级流
java将IO分为了两类
-
节点流:又称为"低级流"(节点流是字节流中的一种)
-
特点:直接链接程序与另一端的"管道",是真实读写数据的流
-
IO一定是建立在节点流的基础上进行的。
-
文件流就是典型的节点流(低级流)
-
-
处理流:又称为"高级流"
-
特点:不能独立存在,必须链接在其他流上
-
目的:当数据经过当前高级流时可以对数据进行某种加工操作,来简化我们的同等操作
-
实际开发中我们经常"串联"一组高级流最终到某个低级流上,使读写数据以流水线式的加工处理完成。这一操作也被称为使"流的链接"。流链接也是JAVA IO的精髓所在。
-
缓冲流
java.io.BufferedInputStream和BufferedOutputStream
功能
在流链接中的作用:加快读写效率
通常缓冲是最终链接在低级流上的流
对象流
java.io.ObjectInputStream和ObjectOutputStream
作用
-
对象输出流:将我们的java对象进行序列化
-
对象输入流:将java对象进行反序列化
序列化
将一个对象转换为一组可被传输或保存的字节。这组字节中除了包含对象本身的数据外,还会包含结构信息。
序列化的意义
实际开发中,我们通常会将对象
-
写入磁盘,进行长久保存
-
在网络间两台计算机中的java间进行传输
无论是保存在磁盘中还是传输,都需要将对象转换为字节后才可以进行。
字符流
-
java将流按照读写单位划分为字节流与字符流.
-
java.io.InputStream和OutputStream是所有字节流的超类
-
而java.io.Reader和Writer则是所有字符流的超类,它们和字节流的超类是平级关系.
-
Reader和Writer是两个抽象类,里面规定了所有字符流都必须具备的读写字符的相关方法.
-
字符流最小读写单位为字符(char),但是底层实际还是读写字节,只是字符与字节的转换工作由字符流完成.
-
字符流都是高级流
转换流
转换流
java.io.InputStreamReader和OutputStreamWriter是常用的字符流的实现类。
实际开发中我们不会直接操作他们,但是他们在流连接中是必不可少的一环。
流连接中的作用
-
衔接字节流与其他字符流
-
将字符与字节相互转换
按照功能可以分为 处理流(高级流)和节点流(低级流)
按照传输数据可以分为 字节流 字符流
我们需要字节流(低级流)来作为应用程序和文件传输的桥梁 字符流(高级流中的一种)中的转换流来进行字符字节的转换 用高级流来进行对数据进行加工