缓冲输出流BufferedOutputStream,底层是有一个字节数组当成缓冲区,将数据先存入到缓冲区中,当调用者调用flush方法或者当缓冲区满了之后,数据就会从缓冲区中出来,写入到文件中。
缓冲区刷新问题_分享
没有调用刷新方法时,数据会存在缓冲区。

  List<String> list = new CopyOnWriteArrayList<String>();
        AtomicInteger ai = new AtomicInteger(0);
        getFile(list);
        System.out.println(list);
        try {
            Thread t = new Thread() {
                public void run() {
                    while (ai.get() < list.size()) {
                        int a = ai.get();
                        ai.incrementAndGet();
                        try {
                            BufferedInputStream fis = new BufferedInputStream(new FileInputStream("C:\\Users\\93985\\Desktop\\新建文件夹\\"+list.get(a)));
                            BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\93985\\Desktop\\新建文件夹1\\" + a + ".jpeg"));
                            int len = 0;
                            byte[] data = new byte[1024];
                            System.out.println(list.get(a));
                            while ((len = fis.read(data)) != -1) {
                                fos.write(data, 0, len);
                                //fos.flush();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }
            };
            t.start();

复制图片会有一些因为没有及时写入而复制失败
缓冲区刷新问题_java_02
当调用了刷新方法,数据每写入一次都会被刷新一次,及时的写入到文件中,就不会出现写入失败的情况了。

缓冲区刷新问题_java_03