利用缓冲流实现文件拷贝 几点疑问

来源:3-14 缓冲流案例

小曼巴0

2020-11-04 22:44:42

# 具体遇到的问题

请问老师,我这里flush方法的使用正确吗?貌似放在while循环外面也能实现功能?

一般使用write方法之后是不是都需要使用flush方法?


# 粘贴全部相关代码,切记添加代码注释(请勿截图)

package pers.snail.buffer;

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

public class BufferDemo2 {

    public static void main(String[] args) {
        // 使用缓冲流拷贝文件
        try {
            FileInputStream file1 =new FileInputStream("happy.jpg");
            BufferedInputStream buffer1 = new BufferedInputStream(file1);
            FileOutputStream file2 =new FileOutputStream("happycopy.jpg");
            BufferedOutputStream buffer2 = new BufferedOutputStream(file2);
            int n = 0;
            byte[] b= new byte[1024];
            long startTime = System.currentTimeMillis();
            while((n=buffer1.read(b))!=-1) {
                buffer2.write(b,0,n);  //写到缓存区
                buffer2.flush();   //强制清除缓存区
            }    
            long endTime = System.currentTimeMillis();
            System.out.println("程序运行时间"+(endTime-startTime));
            file1.close();
            buffer1.close();
            file2.close();
            buffer2.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch(IOException e) {
            e.printStackTrace();
        }

    }

}

在这里输入代码,可通过选择【代码语言】突出显示

写回答

1回答

好帮手慕小脸

2020-11-05

同学你好,

1、测试运行同学代码是可以,但flush写在循环外面就可以了,如果缓冲区满了会自动清空,将数据写入文件。最后调用flush()是为了清空缓冲区最后一次的数据,该数据没有充满缓冲区,需要强制清空。

2、是的,理解是正确的

0

0 学习 · 16556 问题

查看课程