Java学习io流总结

swz20020720 / 2023-08-23 / 原文

一、IO的分类

  1. 按照流向分
    • 输入流 Input
    • 输出流 Output
  2. 按照传输数据的类型来分
    • 字节流
      • 字节输入: InputStream
      • 字节输出: OutputStream
    • 字符流
      • 字符输入流:Reader
      • 字符输出流:Writer
  3. 按照流连接的目标来分
    • 节点流:低级流 --> 程序(内存)直接连接源文件
    • 包装流:高级流--> 连接其他流的流

二、常用方法

  1. 字节流
    • 字节输入: 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() 关流
  2. 字符流
    • 字符输入流: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() 关流

三、常用的流

  1. 字节流
    • 字节输入: InputStream
      • FileInputStream 文件字节输入流 -------------------------节点流
      • BufferedInputStream 缓冲字节输入流------------------包装流
      • ObjectInputStream 对象输入流: 对象反序列化 -------包装流
        • 特有的方法 readObject()
    • 字节输出: OutputStream
      • FileOutputStream 文件字节输出流--------------------节点流
      • BufferedOutputStream 缓冲字节输出流----------包装流
      • ObjectOutputStream 对象输出流: 对象序列化----包装流
        • 特有的方法:writeObject()
        • 序列化的对象对应的类必须实现序列化接口Serializable
  2. 字符流
    • 字符输入流:Reader
      • FileReader 文件字符输入流 -----------------节点流
      • BufferedReader 缓冲字符输入流---------包装流
        • 特有方法: readLine() 读取整行
      • InputStreamReader 字符转换输入流------包装流
    • 字符输出流:Writer
      • FileWriter 文件字符输出流---------------节点流
      • BufferedWriter 缓冲字符出流-----------包装流
      • OutputStreamWriter 字符转换输出流-----包装流
      • PrintWriter 打印流
        • println() 写出内容

四、字节流和字符流总结

  1. 凡是类名的结尾是OutputStream 那么该流就是字节输出流
  2. 凡是类名的结尾是InputStream 那马该流就是字节输入流
  3. 凡是类名的结尾是Writer 那么该流就是字符输出流
  4. 凡是类名的结尾是Reader 那么该流就是字符输入流
  5. 创建流的时候,调用的构造函数如果需要传入另外一条流,那么这条流就一定是包装流
  6. 创建流的时候,调用的构造函数如果传入的是数据节点(文件,内存,网络)那么这条流一定是条节点流

五、字节流和字符流的对比

  1. 字节流比字符流更加的通用,因为无论什么文件,都是按照字节存储的
  2. 字符流只能用于读写纯文件类型的文件,字符流读写非文本类型的文件会造成文件的存储格式被破坏
  3. 对于文本文件而言,可以用字节流读写,也可以用字符流读写,但是建议使用字符流读写,因为字符流读写的话效率更高,