- importjava.io.BufferedOutputStream;
- importjava.io.File;
- importjava.io.FileOutputStream;
- importjava.io.FileWriter;
- importjava.nio.ByteBuffer;
- importjava.nio.channels.FileChannel;
- /**
- *测试各种写文件的方法性能。
- *
- *@author老紫竹JAVA世纪网(java2000.net)
- *
- */
- publicclassT{
- publicstaticvoidmain(String[]args){
- FileOutputStreamout=null;
- FileOutputStreamoutSTr=null;
- BufferedOutputStreamBuff=null;
- FileWriterfw=null;
- intcount=1000000;//写文件行数
- try{
- byte[]bs="测试java文件操作/r/n".getBytes();
- out=newFileOutputStream(newFile("C:/add.txt"));
- longbegin=System.currentTimeMillis();
- for(inti=0;i<count;i++){
- out.write(bs);
- }
- out.close();
- longend=System.currentTimeMillis();
- System.out.println("FileOutputStream执行耗时:"+(end-begin)+"豪秒");
- outSTr=newFileOutputStream(newFile("C:/add0.txt"));
- Buff=newBufferedOutputStream(outSTr);
- longbegin0=System.currentTimeMillis();
- for(inti=0;i<count;i++){
- Buff.write(bs);
- }
- Buff.flush();
- Buff.close();
- longend0=System.currentTimeMillis();
- System.out.println("BufferedOutputStream执行耗时:"+(end0-begin0)+"豪秒");
- fw=newFileWriter("C:/add2.txt");
- longbegin3=System.currentTimeMillis();
- for(inti=0;i<count;i++){
- fw.write("测试java文件操作/r/n");
- }
- fw.flush();
- fw.close();
- longend3=System.currentTimeMillis();
- System.out.println("FileWriter执行耗时:"+(end3-begin3)+"豪秒");
- longbegin4=System.currentTimeMillis();
- Stringpath="C:/add3.txt";
- ByteBufferbb=ByteBuffer.wrap(bs);
- FileChannelout2=newFileOutputStream(path).getChannel();
- for(inti=0;i<count;i++){
- out2.write(bb);
- bb.rewind();
- }
- out2.close();
- longend4=System.currentTimeMillis();
- System.out.println("FileChannel执行耗时:"+(end4-begin4)+"豪秒");
- }catch(Exceptione){
- e.printStackTrace();
- }finally{
- try{
- fw.close();
- Buff.close();
- outSTr.close();
- out.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- }
- }
在我的笔记本上,运行结果如下
FileOutputStream执行耗时:4891 豪秒
BufferedOutputStream执行耗时:78 豪秒
FileWriter执行耗时:438 豪秒
FileChannel执行耗时:2812 豪秒
当然最终生成的文件都是正确的
总结:
BufferedOutputStream 由于有缓冲,性能明显好
FileOutputStream 性能最差,因为其每次都写入字节。
FileWriter 性能很一般
FileChannel使用了nio,但如果没有缓冲,必能太指望性能了