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