首页 > 编程语言 > 详细

Java中 BufferedInputStream/BufferedOutputStream 与 FileInputStream/FileOutputStream 性能对比测试

时间:2019-03-01 22:27:47      阅读:196      评论:0      收藏:0      [点我收藏+]

BufferedInputStream/BufferedOutputStream在文件I/O过程中使用了缓冲区,从而提高了I/O性能。具体提升多少?下面进行测试

测试环境:

CPU:i3-4160 @3.6GHz
内存:4G DDR3 @1333MHz
硬盘:WDC_WD5000AAKX-08U6AA0 ATA
系统:Windows 7 旗舰版

采用文件加密与解密的方法对BufferedInputStream/BufferedOutputStream进行测试,对象文件为exe应用程序,大小4.3MB。

加密与解密的方法见我之前写的博客:Java文件加密与解密

测试方法如下

    public static void main(String[] args) {
        String path = "osu!install.exe";
        File file = new File(path);
        long start = System.currentTimeMillis();
        EncryptionAndDeciphering.encryptFile(file);
        EncryptionAndDeciphering.decipherFile(new File("Encrypted_osu!install.exe"));
        long end = System.currentTimeMillis();
        int time = (int) ((end - start));
        System.out.println("Time:" + time);
    }

先加密osu!install.exe,产生Encrypted_osu!install.exe,再解密Encrypted_osu!install.exe。

测试结果如下,单位毫秒。
技术分享图片

其中缓冲区大小为0代表直接使用FileInputStream/FileOutputStream。

可以看到,使用BufferedInputStream/BufferedOutputStream的平均时间为199ms,而使用FileInputStream/FileOutputStream的平均时间为39535ms,是前者的198.7倍,可见缓冲区的使用极大的提高了I/O性能。

那么具体缓冲区设置多大合适?

从上表可以看出,缓冲区特别小的时候,读写时间还是比较长。但当缓冲区超过1024Bytes是,测试结果已经相差不大,都在300ms以内了。但当缓冲区超过默认值8192Bytes时,继续扩大缓冲区会小幅增加读写时间,具体原因有待研究。

Java中 BufferedInputStream/BufferedOutputStream 与 FileInputStream/FileOutputStream 性能对比测试

原文:https://www.cnblogs.com/elucidator/p/10458962.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!