因为buffered多了一个缓冲区,读和写都是先把硬盘或者内存中的数据放到内存中一块缓存区域,到一定大小读写到硬盘或者内存

 

package io;

import java.io.*;

public class FileIOTest {

    /**
     * @param args
     * @throws FileNotFoundException
     */
    public static void main(String[] args) throws Exception {

        //有buff的File***Stream
        System.out.println("有buff的File***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{
                FileInputStream fis = new FileInputStream("F:\\Test\\file.zip");

                FileOutputStream fos = new FileOutputStream("F:\\Test\\file1.zip");

                byte[] buf = new byte[1024];

                int length = 0;

                while ((length = fis.read(buf)) > 0) {
                    fos.write(buf, 0, length);
                }

                fis.close();
                fos.close();

            }
        }.getTime();
       
        //有buff的Buffered***Stream
        System.out.println("有buff的Buffered***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{

                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\Test\\file.zip"));

                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream("F:\\Test\\file2.zip"));
               
                byte[] buf = new byte[1024];

                int length = 0;
               
                while ((length = bis.read(buf)) > 0) {
                    bos.write(buf, 0, length);
                }

                bis.close();
                bos.close();
               
            }
        }.getTime();
       
        //无buff的File***Stream
        System.out.println("无buff的File***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{
                FileInputStream fis = new FileInputStream("F:\\Test\\file.zip");

                FileOutputStream fos = new FileOutputStream("F:\\Test\\file3.zip");

                int data = 0;

                while ((data = fis.read()) !=-1) {
                    fos.write(data);
                }

                fis.close();
                fos.close();
            }
        }.getTime();
       
        //无buff的Buffered***Stream
        System.out.println("无buff的Buffered***Stream耗时:");
        new TimeTest() {
            void run()throws Exception{
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\Test\\file.zip"));

                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream("F:\\Test\\file4.zip"));
               
                int data = 0;
               
                int i =bis.available();
               
                while ((data = bis.read()) !=-1) {
                    bos.write((byte)data);
                }

                bis.close();
                bos.close();
            }
        }.getTime();
    }

}

//抽象的不太好的模板设计模式
abstract class TimeTest {

    void getTime() {
        long start = System.currentTimeMillis();
        try {
            run();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(System.currentTimeMillis() - start);
    }

    abstract void run() throws Exception;
}

 

 

测试数据248kb

 

测试结果:

 

有buff的File***Stream耗时:
8
有buff的Buffered***Stream耗时:
2
无buff的File***Stream耗时:
1369
无buff的Buffered***Stream耗时:
14

最新文章

  1. Target-Action回调模式
  2. http学习笔记(二)—— 嘿!伙计,你在哪?(URL)
  3. jQueryUI Datepicker的使用
  4. ado.net基础思想-abstract
  5. 漫话JavaScript与异步·第一话——异步:何处惹尘埃
  6. Java---XML的解析(1)-DOM解析
  7. 数学(莫比乌斯反演):HAOI 2011 问题B
  8. EFCore数据库迁移命令整理
  9. directdraw显示yuv420(YV12)
  10. 大三小学期 Android开发的一些经验
  11. [POJ1050] To the Max 及最大子段和与最大矩阵和的求解方法
  12. Python基础(函数-递归)
  13. 如何在Microsoft Word里面插入图片作为背景/封面?
  14. Docker 核心技术之镜像
  15. Ajax实现聊天室
  16. Oracle数据库查询基本数据
  17. python 取当前日期
  18. AutoMapper在MVC中的运用07-映射在订单场景的例子
  19. maven最全教程
  20. Unity3D学习笔记(十八):动画内容补充

热门文章

  1. 【点分治】【路径小于等于k的条数】【路径恰好等于k是否存在】
  2. 72.2801 LOL-盖伦的蹲草计划(广搜)
  3. VMware中网络设置之host-only
  4. Druid 配置_配置WebStatFilter
  5. mysql 实验
  6. Visual Studio 2013在线文档地址备案
  7. linux文件系统命令(6)---touch和mkdir
  8. C语言跟内存分配方式-alloc malloc calloc
  9. 【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
  10. VMWARE虚拟机安装64位系统此主机支持IntelVTx 但IntelVTx处于禁用状态