0
点赞
收藏
分享

微信扫一扫

java FileI(O)nputStream为什么比BufferedI(O)utputStream慢?


因为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


举报

相关推荐

0 条评论