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