2022-08-09 第六小组 高佳誉 学习笔记

IO流

流的分类

  1. 按照流向 (以内存为参照物)
      从硬盘空间 ———> 内存 (输入/读)
      从内存 ———> 硬盘空间 (输出/写)

  2. 按照操作单元(读取数据方式)
      字节流 ——> 按字节读取 (可以操作所有的文件)
      字符流——> 按字符读取 (只能操作文本文件[.txt/.html/.java等])

  3. 按角色划分
      节点流:直接操作的是一个特定的IO流
      处理流:在节点流的基础上,做进一步的处理

Colseable接口

所有的流都实现类Colseable接口,表示他们都是可关闭的close()

close() ----> 关闭流

  1.所有的流(除了标准输出流)都需要手动关闭 (Java7之前)
  2.要确保流一定能关闭,不关闭流会占用大量资源,可以将close()放到finally语句块中
  3.对流关闭时,要先做非空判断,避免NPE
  4.流的关闭顺序:先开后关,后开先关
  5.包装流和节点流的关闭:只需要关闭包装流即可
  6.对于输出流来说,使用close()后就不需要在flush()

AutoCloseable接口(Java7)

由于Closeable继承了AutoCloseable接口,表示所有的流,都是可自动关闭的
使用新语法:try-with-resource
-----> 在try的”()“中声明并初始化实现AutoClosealbe接口的流。

public class Demo {
   @Test
   public void testAutoColse() {
        byte[] datas = {73, 32, 76, 111, 118, 101, 32, 89, 111, 117};
        // 新语法 try-with-resource
        try (OutputStream out = new FileOutputStream("1.txt")) {
                  out.write(datas);
        } catch (FileNotFoundException e) {
                  e.printStackTrace();
        } catch (IOException e) {
                  e.printStackTrace();
      } 
   }
}

Flushable接口

所有的输出流(InputStream/Writer)都实现了Flushable接口,表示所有的输出流都是可刷新的flush()

flush() ----> 刷新流
注意close()具有flush()的功能
flush()表示将通道剩余未输出的数据强行输出(清空管道),如果没有flush()可能会丢失数据

流的四大家族首领

字节流

java.io.InputStream ----> 字节输入流

java.io.OutputStream ----> 字节输出流

字符流

java.io.Reader ----> 字符输入流

java.io.Writer ----> 字符输出流

 

 

 

posted @ 2022-08-09 22:05  憨憨的时倾  阅读(33)  评论(0)    收藏  举报