Java字节流和字符流的复制案例及测速

Java字节流和字符流的复制案例及测速

Java字节流和字符流的复制案例及测速

案例

package com.cnblogs;

import java.io.*;
import java.util.Scanner;

public class TestCopyFile {
    public static void main(String[] args) {
        System.out.println("请输入您要复制的源文件路径:");
        String f = new Scanner(System.in).nextLine();
        System.out.println("请输入您目标文件的路径:");
        String t = new Scanner(System.in).nextLine();

        InputStream in1 = null;
        OutputStream out1 = null;

        try {
            in1 =new BufferedInputStream(new FileInputStream(f)) ;
            out1 =new BufferedOutputStream(new FileOutputStream(t)) ;
            int result;
            while((result = in1.read()) != -1){
                out1.write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


/*
字符流复制的图片没法打开,字节流可以。
 */
//
////        Reader in = null;
////        Writer out = null;
////
////        try {
////            in = new BufferedReader(new FileReader(f));
////            out = new BufferedWriter(new FileWriter(t));
////            int result = 0;
////            while ((result = in.read()) != -1){
////                out.write(result);
////            }
////            System.out.println("文件复制成功!");
////        } catch (Exception e) {
////            System.out.println("文件复制失败!");
////            e.printStackTrace();
////            /*
////            一定会执行的代码需要放在finally{}中,比如关流
////            关流操作是有顺序的,如果有多个流,先创建的后关闭
////            多条关流语句需要各自try-catch
////             */
////        } finally {
////            try {
////                out.flush();
////                out.close();
////            } catch (IOException e) {
////                e.printStackTrace();
////            }
////            try {
////                in.close();
////            } catch (IOException e) {
////                e.printStackTrace();
////            }
////        }
    }
}

总结:

​ 字符流只能复制文本文件,复制的图片,视频尽管可以复制,但会造成文件损坏,

而字节流可以实现完美的复制,不会损坏文件,字节流更接近底层。

测速

package com.cnblogs.api;

import java.io.*;
/*
测试速度,用136M的视频文件来做复制粘贴实验
 */
public class TestSpeed {
    public static void main(String[] args) {
//        method1();//花费时间:429937
//        method2();//花费时间:4308
//        method3();//花费时间:12858
        method4();//花费时间:8245
//        method5();//花费时间:1218
    }

    private static void method5() {
        //测试BufferedInputStream和BufferedOutputStream的速度 加上“车”
        long start = System.currentTimeMillis();
        InputStream in1 = null;
        OutputStream out1 = null;
        try {
            in1 =new BufferedInputStream(new FileInputStream("E:1.wmv")) ;
            out1 =new BufferedOutputStream(new FileOutputStream("E:study1.wmv")) ;
            int result;
            byte[] car = new byte[1024*1024*1024];
            while((result = in1.read(car)) != -1){
                out1.write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间:" + (end - start));
    }

    private static void method4() {
        //测试BufferedReader和BufferedWriter的速度
        long start = System.currentTimeMillis();
        Reader in1 = null;
        Writer out1 = null;
        try {
            in1 =new BufferedReader(new FileReader("E:1.wmv"));
            out1 =new BufferedWriter(new FileWriter("E:study1.wmv"));
            int result;
            while((result = in1.read()) != -1){
                out1.write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间:" + (end - start));
    }

    private static void method3() {
        //测试FileReader和FileWriter的速度
        long start = System.currentTimeMillis();
        Reader in1 = null;
        Writer out1 = null;
        try {
            in1 = new FileReader("E:1.wmv") ;
            out1 = new FileWriter("E:study1.wmv") ;
            int result;
            while((result = in1.read()) != -1){
                out1.write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间:" + (end - start));
    }


    private static void method2() {
        //测试BufferedInputStream和BufferedOutputStream的速度
        long start = System.currentTimeMillis();
        InputStream in1 = null;
        OutputStream out1 = null;
        try {
            in1 =new BufferedInputStream(new FileInputStream("E:1.wmv")) ;
            out1 =new BufferedOutputStream(new FileOutputStream("E:study1.wmv")) ;
            int result;
            while((result = in1.read()) != -1){
                out1.write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间:" + (end - start));
    }

    private static void method1() {
        //测试FileInputStream和FileOutputStream的速度
        long start = System.currentTimeMillis();
        InputStream in1 = null;
        OutputStream out1 = null;
        try {
            in1 = new FileInputStream("E:1.wmv");
            out1 = new FileOutputStream("E:study1.wmv");
            int result;
            while((result = in1.read()) != -1){
                out1.write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间:" + (end - start));
    }
}

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Java字节流和字符流的复制案例及测速