A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 劉芒 中级黑马   /  2016-8-22 22:21  /  504 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.demo04_zijieduibi;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/*
* 对比4种文件复制的效率
* 1)使用字节流,一次读一个字节                                //第一种方法复制共用时372880秒
* 2)使用字节流加数组,一次读一个数组量的数据                //第二种方法复制共用时497秒
* 3)使用缓冲流,不使用数组                                        //第三种方法复制共用时184567秒
* 4)使用缓冲流加数组,一次读一个数组量的数据                //第四种方法复制共用时348秒
* 测时间
* System.currentTimeMillis()
*/
public class ZiJieDuiBi {

        public static void main(String[] args) throws IOException {
                // m1();
                // m2();
                // m3();
                m4();

        }

        // 4)使用缓冲流加数组,一次读一个数组量的数据
        private static void m4() throws IOException {
                InputStream in = new FileInputStream("源文件路径");
                OutputStream out = new FileOutputStream("目标文件路径");
                BufferedInputStream bin = new BufferedInputStream(in);
                BufferedOutputStream bout = new BufferedOutputStream(out);
                long t1 = System.currentTimeMillis();
                int i = -1;
                byte[] b = new byte[1024];
                while ((i = bin.read(b)) != -1) {
                        bout.write(b, 0, i);
                        bout.flush();
                }
                long t2 = System.currentTimeMillis();
                System.out.println("第四种方法复制共用时" + (t2 - t1) + "秒");
                bout.close();
                bin.close();
        }

        // 3)使用缓冲流,不使用数组
        private static void m3() throws IOException {
                FileInputStream in = new FileInputStream("源文件路径");
                FileOutputStream out = new FileOutputStream("目标文路径");
                BufferedOutputStream bout = new BufferedOutputStream(out);
                BufferedInputStream bin = new BufferedInputStream(in);
                int i = -1;
                long t1 = System.currentTimeMillis();
                while ((i = bin.read()) != -1) {
                        bout.write(i);
                        bout.flush();
                }
                long t2 = System.currentTimeMillis();
                System.out.println("第三种方法复制共用时" + (t2 - t1) + "秒");
                // 第一种方法复制共用时372880秒
                bout.close();
                bin.close();
        }

        // 1)使用字节流,一次读一个字节
        private static void m1() throws IOException {
                FileInputStream in = new FileInputStream("源文件路径");
                FileOutputStream out = new FileOutputStream("目标文路径");
                int i = -1;
                long t1 = System.currentTimeMillis();
                while ((i = in.read()) != -1) {
                        out.write(i);
                        out.flush();
                }
                long t2 = System.currentTimeMillis();
                System.out.println("第一种方法复制共用时" + (t2 - t1) + "秒");
                // 第一种方法复制共用时372880秒
                out.close();
                in.close();
        }

        // 2)使用字节流加数组,一次读一个数组量的数据
        private static void m2() throws IOException {
                FileInputStream in = new FileInputStream("源文件路径");
                FileOutputStream out = new FileOutputStream("目标文路径");
                long t1 = System.currentTimeMillis();
                int i = -1;
                byte[] b = new byte[1024];
                while ((i = in.read(b)) != -1) {
                        out.write(b, 0, i);
                        out.flush();
                }
                long t2 = System.currentTimeMillis();
                System.out.println("第二种方法复制共用时" + (t2 - t1) + "秒");
                out.close();
                in.close();
        }
}

3 个回复

倒序浏览
请多多指教!!!
回复 使用道具 举报
悠悠呦呦 来自手机 中级黑马 2016-8-22 22:27:13
藤椅
还没学到  谢谢分享
回复 使用道具 举报
很不错..可以看出来用了多少时间
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马