进口java.io.BufferedOutputStream;
进口java.io.File;
进口java.io.FileOutputStream;
进口java.io.FileWriter;
进口java.nio.ByteBuffer;
进口java.nio.channels.FileChannel;
/* *
*测试各种写文件的方法性能。
* @author老紫竹JAVA世纪网(java2000.net)
*
*/
公共类T {
公共静态void main (String [] args) {
FileOutputStream=零;
FileOutputStream outSTr=零;
BufferedOutputStream迷=零;
FileWriter fw=零;
int数=1000000;//写文件行数
尝试{
byte [] b=安馐詊ava文件操作/r/n”.getBytes ();
=新FileOutputStream(新文件(“C:/add.txt”));
长开始=System.currentTimeMillis ();
(int i=0;我& lt;计数;我+ +){
out.write (bs);
}
out.close ();
长结束=System.currentTimeMillis ();
system . out。println (“FileOutputStream执行耗时:“+(结束-开始)+“豪秒”);
outSTr=new FileOutputStream(新文件(“C:/add0.txt”));
迷=new BufferedOutputStream (outSTr);
长begin0=System.currentTimeMillis ();
(int i=0;我& lt;计数;我+ +){
Buff.write (bs);
}
Buff.flush ();
Buff.close ();
长end0=System.currentTimeMillis ();
system . out。println (“BufferedOutputStream执行耗时:“+ (end0 - begin0) +“豪秒”);
fw=new FileWriter (“C:/add2.txt”);
长begin3=System.currentTimeMillis ();
(int i=0;我& lt;计数;我+ +){
弗兰克-威廉姆斯。写(“测试java文件操作/r/n”);
}
fw.flush ();
fw.close ();
长end3=System.currentTimeMillis ();
system . out。println (“FileWriter执行耗时:“+ (end3 - begin3) +“豪秒”);
长begin4=System.currentTimeMillis ();
字符串路径=癈:/add3.txt”;
ByteBuffer bb=ByteBuffer.wrap (bs);
FileChannel out2=new FileOutputStream(路径).getChannel ();
(int i=0;我& lt;计数;我+ +){
out2.write (bb);
bb.rewind ();
}
out2.close ();
长end4=System.currentTimeMillis ();
system . out。println (“FileChannel执行耗时:“+ (end4 - begin4) +“豪秒”);
}捕捉(异常e) {
e.printStackTrace ();
}最后{
尝试{
fw.close ();
Buff.close ();
outSTr.close ();
out.close ();
}捕捉(异常e) {
e.printStackTrace ();
}
}
}
}
在我的笔记本上,运行结果如下
FileOutputStream执行耗时:4891豪秒
BufferedOutputStream执行耗时:78豪秒
FileWriter执行耗时:438豪秒
FileChannel执行耗时:2812豪秒
当然最终生成的文件都是正确的
总结:
BufferedOutputStream由于有缓冲,性能明显好
FileOutputStream性能最差,因为其每次都写入字节。
FileWriter性能很一般
FileChannel使用了nio,但如果没有缓冲,必能太指望性能了