1. I/O流的概述
1.1 流的概述
Java的I/O流是实现输入/输出的基础,他可以方便的实现数据的输入/输出操作,Java中把不同的输入/输出源抽象表述为“流“,通过流的方式允许Java程序使用相同的方式来访问不同的输入/输出源。”流“是数据传输的通道。流是指一连串流动的字符,是以先进先出方式发送信息的通道。
Java中,处理字节流的两个基础类是InputStream和OutputStream,用于处理字符流的两个基础类是Reader和Writer。
1.2 流的分类
1.2.1 输入流和输出流
按照流的方向,可分为输入流和输出流。
输入流(InputStream):只能从中读取数据,而不能向其中写入数据。
输出流(OutputStream):只能向其中写入数据,而不能从中读取数据。
1.2.2 节点流和处理流
按照流的“角色“可分为”节点流“和”处理流“。
可以向一个特定的IO设备(如磁盘或网络)读/写数据的流,称为节点流。节点流,又被称为低级流。实现对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写的流,称为处理流。处理流是处理流的流,它用来处理其他的流,处理流又被称为高级流。
2. InputStream和OutputStream
InputStream/OutputStream是抽象类,提供了输入/输出处理的基本接口,它们读写流的方式是以字节为单位进行的。下面主要看一下实现其接口的子类。
2.1 InputStream
在java.io包中所有以字节方式读取数据的流都是InputStream的派生类。
2.1.1 低级InputStream类(节点流)
ByteArrayInputStream:为读取字节数组设计的流,允许内存的一个缓冲区被当做InputStream使用。
PipedInputStream:管道流,产生一份数据,能被写入相应的PipedOutputStream。
FileInputStream:用于读取文件中的信息。它用于从文件中读取二进制数据。
FilterInputStream:(抽象类)它派生于InputStream功能在于将一个流连接到另一个流的末端,将两种流连接起来。
2.1.2 高级InputStream类(处理流)
DataInputStream:FilterInputStream抽象类的子类,提供了用于从另一个流中读取简单数据类型和String类型数据的读取方法,这样既可将底层的读取字节的细节隐藏起来,而让程序员直接去处理简单数据类型或String类型的数据。
BufferedInputStream:提供内部缓冲能力的字节流,它避免了每次需要数据时都必须进行读取,可以减少对系统资源的读写,提高程序的运行效率。
2.1.3 层次结构图
2.2 OutputStream
在java.io包中所有以字节方式读取数据的流都是OutputStream的派生类。
2.2.1 低级OutputStream(节点流)
ByteArrayOutputStream:按照字节数组方式向设备中写出字节流的类。
PipedOutputStream:管道流,和PipedInputStream相对应。
2.2.2 高级OutputStream(处理流)
DataOutputStream:FilterOutputStream抽象类的子类,提供了用于向另一个流中写入简单数据类型和String类型数据的读取方法,这样既可将底层的写入字节的细节隐藏起来,而让程序员直接去处理简单数据类型或String类型的数据。
BufferedOutputStream:提供内部缓冲能力的字节流,它避免了每次需要写入数据时都必须执行写入动作,可以减少对系统资源的读写,提高程序的运行效率。
2.2.3 层次结构图
未完待续。。。