java寫文件方法之比較
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;/** * 測試各種寫文件的方法性能。 * * */ public class T { public static void main(String[] args) { FileOutputStream out = null; FileOutputStream outSTr = null; BufferedOutputStream Buff = null; FileWriter fw = null; int count = 1000000;// 寫文件行數 try { byte[] bs = "測試java 文件操作/r/n".getBytes(); out = new FileOutputStream(new File("C:/add.txt")); long begin = System.currentTimeMillis(); for (int i = 0; i < count; i++) { out.write(bs); } 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(bs); } 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.flush(); fw.close(); long end3 = System.currentTimeMillis(); System.out.println("FileWriter執行耗時:" + (end3 - begin3) + " 豪秒"); long begin4 = System.currentTimeMillis(); String path = "C:/add3.txt"; ByteBuffer bb = ByteBuffer.wrap(bs); FileChannel out2 = new FileOutputStream(path).getChannel(); for (int i = 0; i < count; i++) { out2.write(bb); bb.rewind(); } out2.close(); long end4 = System.currentTimeMillis(); System.out.println("FileChannel執行耗時:" + (end4 - begin4) + " 豪秒"); } catch (Exception e) { e.printStackTrace(); } finally { try { fw.close(); Buff.close(); outSTr.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } } </pre>運行結果如下 <p style="text-indent:2em;">FileOutputStream執行耗時:4891 豪秒 </p>
BufferedOutputStream執行耗時:78 豪秒
FileWriter執行耗時:438 豪秒
FileChannel執行耗時:2812 豪秒
當然最終生成的文件都是正確的
總結:
BufferedOutputStream 由于有緩沖,性能明顯好
FileOutputStream 性能最差,因為其每次都寫入字節。
FileWriter 性能很一般
FileChannel使用了nio,但如果沒有緩沖,必能太指望性能了
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!