IO流有趣的问题 使用字节流通过转换两次高效流的话再去读取文件,效率会不会更高?

test1()方法

输入流:字节输入流—>高效字节输入流—>转换输入流->高效字符输入流。  转换成高效流两次。  输出流同理

test2()方法

输入流:字节输入流—>转换输入流->高效字符输入流。  转换成高效流一次。   输出流同理

这两个方法谁会快一点??

高效两次的?  看结果是test2()高效一次的要快一点

test1()  :耗时:22841毫秒

test2():  耗时:21417毫秒

我的理解:使用来两次高效流包装之后,第一次BufferRead的缓冲区读取完之后,还要再去放入BufferInputStream的缓冲区,因此效率变慢了。

测试代码:

package com.yellowstar.demo1;

import java.io.*;

public class Demo1 {

    public static void main(String[] args) throws IOException{
        long start = System.currentTimeMillis();
        test1("D:\\_IDEA\\ideaIU-2018.2.2.exe","C:\\Users\\YellowStar\\Desktop\\tt\\1.exe");
       // test2();
        long end = System.currentTimeMillis();
        System.out.println("耗时:" + (end - start) + "毫秒");//耗时:22841毫秒

        long start1 = System.currentTimeMillis();
        test2("D:\\_IDEA\\ideaIU-2018.2.2.exe","C:\\Users\\YellowStar\\Desktop\\tt\\2.exe");
        // test2();
        long end1 = System.currentTimeMillis();
        System.out.println("耗时:" + (end1 - start1) + "毫秒");//耗时:21417毫秒
    }

    /**
     * 关于字节流转换为高效字节流后转换流再高效转换流之后的效率
     * @param path 源文件
     * @param dest 目标文件
     * @throws IOException
     */
    public static void test1(String path, String dest) throws IOException {
        //字节输入流—>高效字节输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
        //高效字节输入流—>转换输入流
        InputStreamReader isr = new InputStreamReader(bis);
        //转换输入流->高效字符输入流
        BufferedReader br = new BufferedReader(isr);

        //输出流和上面同理因此我们直接一段代码

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(dest))));

        char[] ch = new char[1024];
        int len;
        while ((len = br.read(ch)) != -1) {
            bw.write(ch, 0, len);
            bw.flush();
        }
        br.close();
        bw.close();
    }

    /**
     *
     * @param path
     * @param dest
     * @throws IOException
     */
    public static void test2(String path, String dest) throws IOException {
        //字节输入流
        FileInputStream fis = new FileInputStream(path);
        //字节输入流—>转换输入流
        InputStreamReader isr = new InputStreamReader(fis);
        //转换输入流->高效字符输入流
        BufferedReader br = new BufferedReader(isr);

        //输出流和上面同理因此我们直接一段代码

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dest)));

        char[] ch = new char[1024];
        int len;
        while ((len = br.read(ch)) != -1) {
            bw.write(ch, 0, len);
            bw.flush();
        }
        br.close();
        bw.close();
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值