黑马程序员技术交流社区

标题: 分享一个案例,普通字节流 与 高效字节流的速率区别 [打印本页]

作者: Fate_stay    时间: 2016-9-17 22:01
标题: 分享一个案例,普通字节流 与 高效字节流的速率区别
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyMP4 {
        public static void main(String[] args) throws IOException {
                // 开始计时
                long start = System.currentTimeMillis();
                System.out.println("开始复制...");
                // 方式1: 采用基本的流,一次一个字节的方式复制
                method1("e:\\abc.mp4","d:\\copy1.mp4"); // 太慢了..
                // 方式2: 采用基本的流,一次多个字节的方式赋值
                //method2("e:\\abc.mp4","d:\\copy2.mp4");   
                // 方式3: 采用高效的流,一次一个字节的方式复制
                //method3("e:\\abc.mp4","d:\\copy3.mp4");
                // 方式4: 采用高效的流,一次多个字节的方式赋值
                //method4("e:\\abc.mp4","d:\\copy4.mp4");
                // 结束计时
                long end = System.currentTimeMillis();
                System.out.println("复制结束...");
                System.out.println("共耗时:"+(end - start)+"毫秒");
        }
        // 方式4: 采用高效的流,一次多个字节的方式赋值
        private static void method4(String src, String dest) throws IOException {
                // 1.创建高效流
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
                // 2.读取数据
                // a.定义数组
                byte[] b = new byte[1024];
                // b.定义有效长度
                int len;
                while((len = bis.read(b)) != -1) {
                        bos.write(b, 0, len);
                }
                // 3.关闭资源
                bos.close();
                bis.close();
        }
        // 方式3: 采用高效的流,一次一个字节的方式复制
        private static void method3(String src, String dest) throws IOException {
                // 1.创建流
                FileInputStream fis = new FileInputStream(src);
                FileOutputStream fos = new FileOutputStream(dest);
                // 对字节流进行封装
                BufferedInputStream bis = new BufferedInputStream(fis);
                BufferedOutputStream bos = new BufferedOutputStream(fos);
               
                // 2.读取数据
                int len;
                while((len = bis.read()) != -1) {
                        bos.write(len);
                }
                // 3.关闭资源
                bos.close();
                bis.close();
                fos.close();
                fis.close();
               
        }
        // 方式2: 采用基本的流,一次多个字节的方式赋值
        private static void method2(String src, String dest) throws IOException {
                // 1.创建流
                FileInputStream fis = new FileInputStream(src);
                FileOutputStream fos = new FileOutputStream(dest);
                // 2.读取数据
                // a.定义数组,存储数组长度的字节
                byte[] b = new byte[1024];
                // b.定义有效长度
                int len;
                while((len = fis.read(b)) != -1) {
                        fos.write(b, 0, len);
                }
                // 3.关闭资源
                fos.close();
                fis.close();
               
        }
        // 方式1: 采用基本的流,一次一个字节的方式复制
        private static void method1(String src, String dest) throws IOException {
                // 1.创建流
                FileInputStream fis = new FileInputStream(src);
                FileOutputStream fos = new FileOutputStream(dest);
                // 2.读取数据
                int b;
                while((b = fis.read()) != -1) {
                        fos.write(b);
                }
                // 3.关闭资源
                fos.close();
                fis.close();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2