7.BufferedOutputStream缓冲字节输出流

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

 

 

 

 

 

7.BufferedOutputStream缓冲字节输出流7.BufferedOutputStream缓冲字节输出流 白小乄 发布了19 篇原创文章 · 获赞 11 · 访问量 1万+ 私信 关注
上一篇:socket-Java


下一篇:Java Base64编码和解码