缓冲输出流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();
复制图片会有一些因为没有及时写入而复制失败
当调用了刷新方法,数据每写入一次都会被刷新一次,及时的写入到文件中,就不会出现写入失败的情况了。