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();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章