Java学习io流总结
一、IO的分类
- 按照流向分
- 输入流 Input
- 输出流 Output
- 按照传输数据的类型来分
- 字节流
- 字节输入: InputStream
- 字节输出: OutputStream
- 字符流
- 字符输入流:Reader
- 字符输出流:Writer
- 字节流
- 按照流连接的目标来分
- 节点流:低级流 --> 程序(内存)直接连接源文件
- 包装流:高级流--> 连接其他流的流
二、常用方法
- 字节流
- 字节输入: InputStream
- int read() : 读取一个字节
- int read(byte[] b) : 读取一个字节数组
- int read(byte[] b, int off,int len) 读取一个指定的Byte数组的指定长度
- void close() 关流
- 字节输出: OutputStream
- void write(int b) 写出一个字节
- void write(byte[] b) 写出一个字节数组
- void write(byte[] b, int off,int len) 写出一个指定的Byte数组的指定长度
- void flush() 冲刷管道
- void close() 关流
- 字节输入: InputStream
- 字符流
- 字符输入流:Reader
- int read() 读取一个字符
- int read(char[] cbuf) 读取一个字符数组
- int read(char[] cbuf, int off, int len) 读取指定数组的某一部分
- void close() 关流
- 字符输出流:Writer
- void write(String str) 写出字符串
- void write(String str, int off, int len) 写出字符串中的一部分
- void write(int c) 写出一个字符
- void flush() 冲刷管道
- void close() 关流
- 字符输入流:Reader
三、常用的流
- 字节流
- 字节输入: InputStream
- FileInputStream 文件字节输入流 -------------------------节点流
- BufferedInputStream 缓冲字节输入流------------------包装流
- ObjectInputStream 对象输入流: 对象反序列化 -------包装流
- 特有的方法 readObject()
- 字节输出: OutputStream
- FileOutputStream 文件字节输出流--------------------节点流
- BufferedOutputStream 缓冲字节输出流----------包装流
- ObjectOutputStream 对象输出流: 对象序列化----包装流
- 特有的方法:writeObject()
- 序列化的对象对应的类必须实现序列化接口Serializable
- 字节输入: InputStream
- 字符流
- 字符输入流:Reader
- FileReader 文件字符输入流 -----------------节点流
- BufferedReader 缓冲字符输入流---------包装流
- 特有方法: readLine() 读取整行
- InputStreamReader 字符转换输入流------包装流
- 字符输出流:Writer
- FileWriter 文件字符输出流---------------节点流
- BufferedWriter 缓冲字符出流-----------包装流
- OutputStreamWriter 字符转换输出流-----包装流
- PrintWriter 打印流
- println() 写出内容
- 字符输入流:Reader
四、字节流和字符流总结
- 凡是类名的结尾是OutputStream 那么该流就是字节输出流
- 凡是类名的结尾是InputStream 那马该流就是字节输入流
- 凡是类名的结尾是Writer 那么该流就是字符输出流
- 凡是类名的结尾是Reader 那么该流就是字符输入流
- 创建流的时候,调用的构造函数如果需要传入另外一条流,那么这条流就一定是包装流
- 创建流的时候,调用的构造函数如果传入的是数据节点(文件,内存,网络)那么这条流一定是条节点流
五、字节流和字符流的对比
- 字节流比字符流更加的通用,因为无论什么文件,都是按照字节存储的
- 字符流只能用于读写纯文件类型的文件,字符流读写非文本类型的文件会造成文件的存储格式被破坏
- 对于文本文件而言,可以用字节流读写,也可以用字符流读写,但是建议使用字符流读写,因为字符流读写的话效率更高,