ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7.BufferedOutputStream缓冲字节输出流

2020-01-13 12:39:14  阅读:271  来源: 互联网

标签:文件 字节 缓冲 写入 数组 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

 

 

 

 

 

白小乄 发布了19 篇原创文章 · 获赞 11 · 访问量 1万+ 私信 关注

标签:文件,字节,缓冲,写入,数组,BufferedOutputStream,硬盘
来源: https://blog.csdn.net/qq_38082911/article/details/103955899

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有