7.BufferedOutputStream
1.输出字节流
- - - - | OutputStream 输出字节流的基类,抽象类
- - - - - - - - | FileOutputStream向文件输出数据的 输出字节流
- - - - - - - - | BufferedOutputStream缓冲输出字节流。BufferedOutputStream出现的目的是为了提高向文件输出数据的效率。其内部维护了一个8kb(8192字节)的数组。
2.使用BufferedOutputStream的步骤:
1. 找到目标文件
2. 搭建数据通道
3. 将数据写出到BufferedOutputStream 维护的字节数组中
4. 将字节数组(内存)中的数据写出到硬盘文件中。
3.BufferedOutputStream需要注意的细节
1. 在使用BufferedOutputStream写数据的时候,它的write方法是将数据写入到它内部维护的数组中的,而不是直接写入到内存中。因为BufferedOutputStream不具备向文件中写入数据的能力。
2.使用BufferedOutputStream向文件写入数据的三种情况
首先使用BufferedOutputStream的write方法,将数据写入到字节数组中(也就是内存中),从内存中写入硬盘文件有3种情况:
(1)使用flush方法,将内存中的数据刷入硬盘文件中。
(2)使用close方法,将内存中的数据刷入硬盘文件中。其实它内部调用的是flush和close两个方法,向将输入flush刷入硬盘文件中,再关闭FileOutputStream流资源。
(3)当字节数组已经填满数据时(即字节数组已经存储了8kb字节),它将会自动将数组中的数据刷入硬盘文件中。
4.案例
public class Dome2 {
public static void main(String[] args) {
// 1.找到目标文件
File file = new File("E:\\aa\\bb\\BufferOutputStream.txt");
// 2.搭建通道
FileOutputStream fileOutputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
fileOutputStream = new FileOutputStream(file);
// BufferedOutputStream
bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
// 3.将数据写出到BufferedOutputStream维护的字节数组中
String str = "hello word!!!";//要写入的数据
byte[] bytes = str.getBytes();//将字符串转换成字节数组
bufferedOutputStream.write(bytes);//将字节输入写入到BufferedOutputStream内部维护的字节数组中
} catch (FileNotFoundException e) {
System.out.println("找寻文件发生异常......");
throw new RuntimeException(e);
} catch (IOException e) {
System.out.println("写出数据到内存中发生异常......");
throw new RuntimeException(e);
} finally {
try {
// 4.将字节数组中的数据写出到硬盘文件中
//fileOutputStream.flush();//将内存中数据刷入硬盘文件中
bufferedOutputStream.close();//BufferedOutputStream的close方法内部,也是调用的flush方法
/*
BufferedOutputStream的close方法的源码:
public void close() throws IOException {
try (OutputStream ostream = out) {
flush();
}
}
*/
// 当BufferedOutputStream内部维护的8kb的字节数组填充满时,也会自动调用flush方法,将数据写出到硬盘文件中。
} catch (IOException e) {
System.out.println("写出内存中数据到硬盘发生异常......");
throw new RuntimeException(e);
}
}
}
}
总结:
1. BufferedOutputStream的使用方法与BufferedInputStream的使用方法类似,只是BufferedOutputStream的write方法是将数据写入到内部维护的字节数组中,而不是直接写入到硬盘文件中。
2. 从内存数组将数据写入到硬盘文件,调用的plush方法与close方法效果相同,因为close方法的内部其实也是调用了flush方法。
3. BufferedInputStream 的笔记内容见上一篇: https://blog.csdn.net/qq_38082911/article/details/103951009
白小乄 发布了19 篇原创文章 · 获赞 11 · 访问量 1万+ 私信 关注