Java-IO(各种流的拷贝)

拷贝

  • 元数据——>目的地
拷贝方式:
  • 单个 字节/字符 的拷贝
  • 按照 字节/字符 数组拷贝

测试

  • 单个字节和字节数组读取时间
  • 非缓冲与带缓冲的读取时间
package com.bigdat.java.day25;
import java.io.*;
/*
    测试
        单个字节和字节数组读取时间
        非缓冲与带缓冲的读取时间
 */
public class CopyDemo2 {
    public static void main(String[] args) {
          // oneTest();  单个字节读取视屏的时间为2107904毫秒
         // shuZuTest(); 数组读取视屏的时间为2392毫秒
        //  OneBufferText();  缓冲单字节读取视屏的时间为:9503毫秒
        // shuzuBufferText(); 缓冲字节数组读取视屏的时间为:547毫秒
    }
    //测试单个字符读取一段视屏的时间
    public static void oneTest(){
        //创建读取对象
        FileInputStream fileInputStream = null;
        //创建写出对象
        FileOutputStream fileOutputStream = null;

        try {
            fileInputStream = new FileInputStream("D:\\我被改名了\\17day24 字节流速度对比,编码表 2.mp4");
            fileOutputStream = new FileOutputStream("D:\\我被改名了\\copy1.mp4");
            Long start = System.currentTimeMillis();
            //开始读取
            int len = 0;
            while((len = fileInputStream.read()) != -1){
                fileOutputStream.write(len);
            }
            long end = System.currentTimeMillis();
            System.out.println("单个字节读取视屏的时间为"+(end-start)+"毫秒");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
    //测试字节数组copy视屏的时间
    public static void shuZuTest(){
        //创建读取对象
        FileInputStream fileInputStream = null;
        //创建写出对象
        FileOutputStream fileOutputStream = null;

        try {
            fileInputStream = new FileInputStream("D:\\我被改名了\\17day24 字节流速度对比,编码表 2.mp4");
            fileOutputStream = new FileOutputStream("D:\\我被改名了\\copy2.mp4");
            Long start = System.currentTimeMillis();
            //开始读取
            int len = 0;
            byte[] bytes = new byte[1024];
            while((len = fileInputStream.read(bytes)) != -1){
                fileOutputStream.write(bytes, 0, len);
            }
            long end = System.currentTimeMillis();
            System.out.println("数组读取视屏的时间为"+(end-start)+"毫秒");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
      //缓冲流单个字节读取视屏测试时间
    public static void OneBufferText(){
        //创建读入字节的对象
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;

        try {
            bufferedInputStream = new BufferedInputStream(new FileInputStream("D:\\我被改名了\\17day24 字节流速度对比,编码表 2.mp4"));
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("D:\\我被改名了\\copy3.mp4"));

            //开始时间
            long start = System.currentTimeMillis();
            //开始写入到程序中
            int len = 0;
            while((len = bufferedInputStream.read()) != -1){
                bufferedOutputStream.write(len);
            }
            long end = System.currentTimeMillis();
            System.out.println("缓冲单字节读取视屏的时间为:"+(end-start));


        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                bufferedOutputStream.close();
                bufferedInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
    public static void shuzuBufferText(){
        //创建读入字节的对象
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream = null;

        try {
            bufferedInputStream = new BufferedInputStream(new FileInputStream("D:\\我被改名了\\17day24 字节流速度对比,编码表 2.mp4"));
            bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("D:\\我被改名了\\copy4.mp4"));

            //开始时间
            long start = System.currentTimeMillis();
            //开始写入到程序中
            int len = 0;
            byte[] bytes = new byte[1024];
            while((len = bufferedInputStream.read(bytes)) != -1){
                bufferedOutputStream.write(bytes, 0, len);
            }
            long end = System.currentTimeMillis();
            System.out.println("缓冲字节数组读取视屏的时间为:"+(end-start)+"毫秒");


        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                bufferedOutputStream.close();
                bufferedInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }



    }
}
package com.bigdat.java.day25;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
   将 D盘中的p.txt 文件拷贝一份到 D 盘中的 q.txt 文件
 */
public class CopyDemo1 {
    public static void main(String[] args) {
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            //创建文件输入流
             fileInputStream = new FileInputStream("D:\\p.txt");
            //创建文件的输出流
             fileOutputStream = new FileOutputStream("D:\\w.txt");

             //开始读取文件
            //方法一:一个字节一个字节的读
//            int len = 0;
//            while ((len = fileInputStream.read()) !=-1){
//                fileOutputStream.write(len);
//            }
            //方式二:利用字节数组读取
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = fileInputStream.read(bytes)) != -1){
                System.out.println(len);
                fileOutputStream.write(bytes, 0, len);
            }
            System.out.println("复制成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
posted @ 2022-04-10 13:46  a-tao必须奥利给  阅读(120)  评论(0编辑  收藏  举报