1. 基本概念 :
I/O(Input/Output): 输入输出
数据源 (Data Source): 提供数据的地方 , 包括键盘输入 , 硬盘文件 , 网络文件等
数据宿 (Data Sink): 接收数据的地方 , 包括显示器 , 硬盘文件 , 打印机等 .
2. 流 (Stream):JAVA 中把不同的数据源与程序间的数据传输都抽象表述为 ” 流 ”(Stream), 从而完成输入输出操作
I/O 流的分类 :
> 输入流 (Input Stream) 和输出流 (Output Stream)
输入流只能从中读取数据 , 而不能向其中写入数据 .
输出流只能从中写入数据 , 而不能读取其中的数据 .
特例 :java.io.RandomAccessFile 可以随机读写文件 .
> 节点流 (Node Stream) 和处理流 (Processing Stream)
节点流是直接连接到数据源的
处理流是对一个已经存在的流的连接和封装 , 通过封装 , 可增强数据的读写功能 .
> 字节流 (Byte Stream) 和字符流 (Character Stream)
字节流以字节为单位进行传输 , 如字母
字符流以字符 (2 个字节 ) 为单位进行传输 , 如中文字符
3. 类层次结构
输入流 输出流
字节流 InputStream OutputStream
字符流 Reader Writer
注 : 所有的流类型均继承于以上四个抽象流类型 . 且所有以 InputStream 或 OutputStream 结尾的均为字节流 , 所有以 Reader 或 Writer 结尾的均为字符流 .
*InputStream 抽象类是所有字节输入流的超类, 子类对此进行了分化和扩展, 类层次结构图为:
*OutputStream 抽象类是所有字节输出流的超类. 与InputStream 类相对应
*Reader 抽象类是 所有字符输入流的超类
*Writer 抽象类是所有字符输出流的超类
4. 常用的 I/O 流类型
>FileInputStream 和 FileOutputStream
FileInputStream 用于读取本地文件中字节数据
FileOutputStream 用于将字节数据写出到文件中
>FileReader 和 FileWriter
FileReader 用于以字符为单位读取文件数据
FileWriter 用于将字符数据写出到文件中 .
>BufferedReader 和 BufferedWriter
BufferedReader 用于缓冲读取字符 ,BufferedWriter 则提供字符的缓冲写出功能
>InputStreamReader 和 OutputStreamWriter< 处理流类 >
InputStreamReader 可封装字节输入流并从中读取字节数据 , 然后将其转换为字符 .
转换时可以在构造方法中设定字符编码 , 也可以使用操作系统的默认字符编码 .
public InputStreamReader(InputStream in)
public InputStreamReader(InputStream in,String charsetName)
OutputStreamWriter 与 InputStreamReader 相对应 , 它可以按照特定的字符编码规则把字符转化为字节并写出到它所封装的字节输出流 .
>PrintStream 和 PrintWriter
PrintStream 在 OutputStream 基础之上提供了增强的功能 , 即可以方便的输出各种类型的数据 ( 而不仅限于 byte 类型 ).PrintStrem 的方法从不抛出 IOException.
Printwriter 提供了 PrintStream 的所有打印方法 , 其方法也从不抛出 IOException
与 PrintStream 的区别 : 作为处理流使用时 ,PrintStream 只能封装 OutputStream 类型的字节流 , 而 PrintWriter 既可以封装 OutputStream, 也能封装 Writer 类型的字符输出流并增强其功能 .
>DataInputStream 和 DataOutputStream
二者分别实现了 DataInput/DataOutput 接口
DataInputStream 能够以一种与机器无关的方式 , 直接从底层字节输入流读取 JAVA 基本类型和 String 类型的数据
DataOutputStream 则能够直接将 JAVA 基本类型和 String 类型数据写出到其他的字节输出流 .
>CharArrayReader 和 CharArrayWriter
CharArrayReader 实现了一个可用作字符输入流的字符缓冲区
CharArrayWriter 实现一个可当作 Writer 使用的字符输出缓冲区 .
5. 随机读写文件 RandomAccessFile