1 字节流

  • 基类
    • InputStream
    • OutputStream
  • 文件输出流

    • FileInputStream
    • FileoutputStream
    • 构造方法 ( File file ) 和 ( String fileName ) 文件对象或者文件名
    • ```java // 输出流单个字节写入 int readData; while ((readData = fis.read()) != -1) { fos.write(readData); }

    // 输出流数组写入 int len; byte[] by = new byte[1024]; while ((len = fis.read(by)) != -1) { fos.write(by,0,len); }

    // 输出流字符串转数组写入 String line = sc.nextLine(); fos.write(line.getBytes()); ```

  • 缓冲输出流

    • BufferedInputStream
    • BufferedOutputStream
    • 构造方法( InputStream in )和 ( InputStream in, int size ) 缓冲区8KB,带缓冲的一定记得 flush() 刷新!!!
  • 其他要点

      1. out.write(System.lineSeparator().getBytes()); //实现换行
      1. FileOutputStream(fileName,true); //文件追加
      1. // try-with-resources
      2. try(资源,实现了AutoCloseable接口的资源){
      3. // 代码
      4. // 执行完之后会去自动执行close方法去释放资源
      5. }catch{}
    • 装饰器模式:参考 设计模式.md 文件

2 字符流

  • 基类
    • Reader
    • Writer
  • 转换流
    • InputStreamReader
    • OutputStreamWriter
    • 构造方法 ( OutputStream out ) 和 ( OutputStream out , String charsetName ) 字节流对象和编码集
  • 简化流
    • FileReader
    • FileWriter
    • 构造方法 ( File file ) 和 ( String fileName ) 文件对象或者文件名
  • 缓冲流
    • BufferedReader
    • BufferedWriter
    • 构造方法 ( Writer out ) 和 ( Writer out , int sz ) 默认缓冲区16KB,可以自定义缓冲区
  • 其他要点
    • 编码表
      • ASCII:1个字节的低7位
      • ISO8859-1:1个字节(的8位)
      • GBK:2个字节代表一个中文
      • UTF-8:3个字节代表一个中文
      • ANSI:简体中文环境下默认是GBK
    • 编码与解码
      ```java String s = “小可爱”; byte[] bytes = s.getBytes(); System.out.println(Arrays.toString(bytes)); //[-27, -80, -113, -27, -113, -81, -25, -120, -79] //一个byte是1字节,UTF-8使用3个字节代表一个汉字

byte[] bytes = s.getBytes(“GBK”); System.out.println(Arrays.toString(bytes)); //[-48, -95, -65, -55, -80, -82]

  1. - 独有的方法
  2. - readLine() 读取一行
  3. - writeLine() 写入一行
  4. <a name="afc937a1"></a>
  5. #### 3 数据流
  6. - 数据流
  7. - DataInputStream
  8. - DataOutputStream
  9. - 构造方法 ( OutputStream out )
  10. - 其他要点
  11. - 每一种基本的数据类型都有独自的方法与其对应 readInt()、writeInt()
  12. - 按照什么样的顺序写 一定要按照什么样的顺序读取!!!
  13. <a name="f2c37ad5"></a>
  14. #### 4 打印流
  15. - 打印流
  16. - PrintStream
  17. - PrintWriter
  18. - 其他要点
  19. -
  20. ```java
  21. // 标准输入输出流
  22. PrintStream out = System.out;
  23. InputStream in = System.in;
  • 开启自动刷新后哪一种不会自动刷新
    • 启动自动刷新 println -> write() + newLine() + flush()
    • 启动自动刷新 write() -> write()+ flush()

5 对象流

  • 对象流
    • ObjectInputStream
    • ObjectOutputStream
  • 对象流只能读取对象流生成的文件,如果原始空文件报 EOFException,先用对象流写入null对象再读取
  • transient关键字保证成员变量不被序列化