最近对以前开发的一个通用数据迁移的软件进行优化。除了用JDK5.0的多线程技术进行的改进之外,也比较了一下java写文件的性能。
- imp
ort java.io.File; - imp
ort java.io.FileOutputStream; - imp
ort java.io.*; -
- public
class FileTest { -
public FileTest() { -
} -
-
public static void main(String[] args) { -
FileOutputStream out = null; -
FileOutputStream outSTr = null; -
BufferedOutputStream Buff=null; -
FileWriter fw = null; -
int count=1000;//写文件行数 -
try { -
out = new FileOutputStream(new File("C:/add.txt")); -
long begin = System.currentTimeMillis(); -
for (int i = 0; i < count; i++) { -
out.write("测试java 文件操作\r\n".getBytes()); -
} -
out.close(); -
long end = System.currentTimeMillis(); -
System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒"); -
-
outSTr = new FileOutputStream(new File("C:/add0.txt")); -
Buff=new BufferedOutputStream(outSTr); -
long begin0 = System.currentTimeMillis(); -
for (int i = 0; i < count; i++) { -
Buff.write("测试java 文件操作\r\n".getBytes()); -
} -
Buff.flush(); -
Buff.close(); -
long end0 = System.currentTimeMillis(); -
System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒"); -
-
-
fw = new FileWriter("C:/add2.txt"); -
long begin3 = System.currentTimeMillis(); -
for (int i = 0; i < count; i++) { -
fw.write("测试java 文件操作\r\n"); -
} -
fw.close(); -
long end3 = System.currentTimeMillis(); -
System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒"); -
-
} catch (Exception e) { -
e.printStackTrace(); -
} -
finally { -
try { -
fw.close(); -
Buff.close(); -
outSTr.close(); -
out.close(); -
} catch (Exception e) { -
e.printStackTrace(); -
} -
} -
} -
-
- }
- 1.当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:
- FileOutputStream执行耗时:46
豪秒 - BufferedOutputStream执行耗时:31
豪秒 - FileWriter执行耗时:15
豪秒 -
-
- 2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:
- FileOutputStream执行耗时:188
豪秒 - BufferedOutputStream执行耗时:32
豪秒 - FileWriter执行耗时:16
豪秒 -
-
-
- 3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:
- FileOutputStream执行耗时:1266
豪秒 - BufferedOutputStream执行耗时:125
豪秒 - FileWriter执行耗时:93
豪秒 -
-
-
- 4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为18555KB:
- FileOutputStream执行耗时:12063
豪秒 - BufferedOutputStream执行耗时:1484
豪秒 - FileWriter执行耗时:969
豪秒
由 以上数据可以看到,如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的鲁棒性是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢11094毫秒(11 秒),BufferedOutputStream比FileWriter慢515毫秒。