首先我们来对比一下文件字节输入流和字节缓冲输入流的read方法,可以看到两者的read方法的都继承自InputStream类,且read(bytes[ ] b)方法都没有被子类重写,所以代码执行的效率理论上没有区别。
再来对比文件字节输出流和字节缓冲输出流的write方法,可以看到有所不同:
文件字节输出流的write(bytes[ ] b)是将字节数组中的数据直接写入到此文件输出流,不经过缓冲区;字节缓冲输出流会给文件字节输出流增加一个缓冲区,提高文件字节输出流的写入效率,然后通过flush方法,将缓冲区中的数据刷新到文件中。
综上所述,使用文件字节输入/输出流复制文件、使用字节缓冲输入/输出流复制文件的区别就在于:
两者在输入上都经过缓冲区(缓冲数组);但是在输出上,文件字节输出流不经过缓冲区,字节缓冲输出流经过缓冲区。所以理论上,使用字节缓冲输入/输出流进行文件复制的效率要高于使用文件字节输入/输出流。
代码示例:
使用文件字节输入/输出流复制一张图片,耗时60毫秒左右。
public static void main(String[] args) throws IOException {
long s = System.currentTimeMillis();
FileInputStream fis = new FileInputStream("C:\\1.jpg"