写文件 faster and faster

来源:互联网 发布:网易imap服务器和端口 编辑:程序博客网 时间:2024/06/05 11:15
import java.io.BufferedWriter;
import java.io.FileWriter;


public class Test {


public static void main(String[] args) {
int max = 100000000;
long t1 = System.currentTimeMillis();
test1(max);
long t2 = System.currentTimeMillis();
System.out.println("test1耗时:"+(t2-t1));
long t3 = System.currentTimeMillis();
test2(max);
long t4 = System.currentTimeMillis();
System.out.println("test2耗时:"+(t4-t3));
long t5 = System.currentTimeMillis();
test3(max);
long t6 = System.currentTimeMillis();
System.out.println("test3耗时:"+(t6-t5));

//两次测试结果
//已知 max=100000000
 
//test1耗时:46593/52906
//test2耗时:28563/28250
//test3耗时:21859/22594
}

public static void test1(int max){
BufferedWriter bw = null;
String fileName = "d:/1.txt";
try{
bw = new BufferedWriter(new FileWriter(fileName, true));
for(int i=0;i<max;i++){
bw.write(i+"\r\n");
}
bw.flush();
bw.close();
}catch (Exception e) {
e.printStackTrace();
}
}

public static void test2(int max){
BufferedWriter bw = null;
String fileName = "d:/2.txt";
try{
bw = new BufferedWriter(new FileWriter(fileName, true));
for(int i=0;i<max;i++){
bw.write(String.valueOf(i));
bw.write("\r\n");//快于bw.newLine()
}
bw.flush();
bw.close();
}catch (Exception e) {
e.printStackTrace();
}
}

public static void test3(int max){
BufferedWriter bw = null;
String fileName = "d:/3.txt";
try{
StringBuffer sb = new StringBuffer();
bw = new BufferedWriter(new FileWriter(fileName, true));
for(int i=0;i<max;i++){
sb.append(i);
sb.append("\r\n");
//10000写入一次
if(i%10000==0){
bw.write(sb.toString());
sb.delete(0, sb.length());
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
}catch (Exception e) {
e.printStackTrace();
}
}

}


//两次测试结果
//已知 max=100000000
 
//test1耗时:46593/52906
//test2耗时:28563/28250
//test3耗时:21859/22594

test1采用字符串连接的写入方式,一次写入一行,耗时最长;test2采用分别写入方式,耗时近1半;test3采用批量写入耗时不足一半。由此可知,test3的写入效率最高。 test2和test3比较  每次循环test3 write一次,test2 write两次。