一、什么是IO
io在本质上是单个字节的移动。而流能够说是字节移动的载体和方式,它不停的向目标处移动数据。我们要做的就是依据流的方向从流中读取数据或者向流中写入数据。
二、java中支持IO操作的库类
1、依照数据类型分为两类:
(1)字节类型:InputStream和OutputStream
(2)字符类型:Writer和Reader
2、依照数据的流动方向,主要分为两类:
(1)基于磁盘操作的io接口:File
(2)基于网络的io接口:socket三、字节流、字符流的io接口说明
字节流包含输入流InputStream和输出流OutputStream。字符流包含输入流Reader,
InputStream相关类图例如以下。仅仅列举了一级子类:
InputStream提供了一些read方法供子类继承。用来读取字节。
OutputStream相关类图例如以下:
OutputStream提供了一些write方法供子类继承,用来写入字节。
Reader相关类图例如以下:
Reader提供了一些read方法供子类继承。用来读取字符。
Writer相关类图例如以下:
Writer提供了一些write方法供子类继承,用来写入字符。
每一个字符流子类差点儿都会有一个相相应的字节流子类,两者功能一样。区别仅仅是在于操作的是字节还是字符。
比如CharArrayReader和 ByteArrayInputStream,两者都是在内存中建立数组缓冲区作为输入流,不同的仅仅是前者数组用来存放字符。每次从数组中读取一个字符;后者则是针对字节。
ByteArrayInputStream、CharArrayReader | 为多线程的通信提供缓冲区操作功能。经常使用于读取网络中的定长数据包 |
ByteArrayOutputStream、CharArrayWriter | 为多线程的通信提供缓冲区操作功能。经常使用于接收足够长度的数据后进行一次性写入 |
FileInputStream、FileReader | 把文件写入内存作为输入流,实现对文件的读取操作 |
FileOutputStream、FileWriter | 把内存中的数据作为输出流写入文件。实现对文件的写操作 |
StringReader | 读取String的内容作为输入流 |
StringWriter | 将数据写入一个String |
SequenceInputStream | 将多个输入流中的数据合并为一个数据流 |
PipedInputStream、PipedReader、PipedOutputStream、PipedWriter | 管道流。主要用于2个线程之间传递数据 |
ObjectInputStream | 读取对象数据作为输入流,对象中的 transient 和 static 类型的成员变量不会被读取或写入 |
ObjectOutputStream | 将数据写入对象 |
FilterInputStream、FilterOutputStream、FilterReader、FilterWriter | 过滤流通常源和目标是其它的输入输出流,大家能够看到有众多的子类。各实用途,就不一一介绍了 |