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 ----> 字符输出流



浙公网安备 33010602011771号