JAVA BufferedOutputStream 类

FileOutputStream 缺点

FileOutputStream 频繁调用 write() 方法,写少量数据,会立即将数据写到硬盘,这样会导致效率低下

解决

使用 BufferedOutputStream

相当于下图中的迅雷下载:

BufferedOutputStream 就相当于 迅雷中的缓存,调用 write() 方法时,先将数据写入到 缓存中,调用 flush()close() 方法后,才会将数据写到硬盘

例子

package stdfile;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class StdBuff {

    public static void main(String[] args) {

        FileOutputStream fos=null;
        BufferedOutputStream bos=null;
        try {
            fos=new FileOutputStream("D:\\1测试.txt");
            bos=new BufferedOutputStream(fos);

            byte[] array="你好".getBytes();
            bos.write(array);// 缓冲流,调用 write() 方法不会立即往硬盘上写,而是向缓存中写

            bos.flush();//立即将缓存中的数据写入到磁盘

            bos.write(99);

            System.out.println();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //关闭流的顺序不能改变,否则报错
            //后打开的先关闭,或者 包装流先关闭
            if(bos!=null){
                try {
                    bos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            //先打开的要后关闭,或者
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }
}

注意关闭流的顺序: 后打开的先关闭,或者 包装流先关闭


原文出处:https://malaoshi.top/show_1IX2maEtQYWr.html