【Java】使用文件字节输入/输出流复制文件、使用字节缓冲输入/输出流复制文件的区别

本文探讨了Java中文件字节输入流与字节缓冲输入流,以及文件字节输出流与字节缓冲输出流的区别。尽管两者在输入时都使用缓冲区,但在输出时,字节缓冲输出流通过缓冲区提高写入效率,而文件字节输出流直接写入。实测表明,使用字节缓冲输入/输出流复制文件的效率更高,例如复制一张图片时,字节缓冲流耗时约20毫秒,而文件字节流耗时约60毫秒。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  首先我们来对比一下文件字节输入流字节缓冲输入流的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"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值