Io優化

ck2265395 13年前發布 | 1K 次閱讀 web開發人員

Java中的IO的性能優化
在使用IO的時候注意一下細節,能使性能得到很大的優化.
首先讀寫大文件,使用Buffer是肯定的了,使用方法,有下邊兩個

 1  方法一:
 2  public   static   void  test1(String fileName)  {
 3      long  start  =  System.currentTimeMillis();
 4       try   {
 5         FileInputStream fis  =   new  FileInputStream(fileName);
 6         BufferedReader br  =   new  BufferedReader( new  InputStreamReader(fis) );
 7         StringBuffer sb  = new  StringBuffer();
 8         String str;
 9           while  ((str  =  br.readLine())  !=   null  {
10             sb.append(str);
11         } </span>
12      } </span>  catch  (IOException e)  {
13     } </span>
14      long  end  =  System.currentTimeMillis();
15      long  time = end - start;
16     System.out.println(time);
17 } </span>
18 方法二:
19  public   static   void  test2(String fileName)  {
20      long  start  =  System.currentTimeMillis();
21       try   {
22         FileInputStream fis  =   new  FileInputStream(fileName);
23          byte  buf[]  =   new   byte [ 8192 ];
24          int  n;
25         StringBuffer sb  =   new  StringBuffer();
26           while  ((n  =  fis.read(buf))  !=   - 1  {
27             sb.append(buf);
28         } </span>
29         fis.close();
30      } </span>  catch  (IOException e)  {
31     } </span>
32      long  end  =  System.currentTimeMillis();
33      long  time = end - start;
34     System.out.println(time);
35 }</span>


方法一1937ms  
方法二47ms
測試結果相差大概50倍左有,很大。
而我平時的習慣是方法一。問題主要出在readLine()上。

如果只是簡單的文件拷貝,下邊兩種方法也不錯

 1  public       static       void    test3()       {
 2     String cmd   =   "  copy d:/out1.txt out2.txt  "  ;
 3       try   {
 4          Runtime.getRuntime().exec(cmd);
 5      } </span>  catch  (Exception e)  {
 6          e.printStackTrace();
 7     } </span>
 8 } </span>
 9  public     static     void   test4()  {
10     String inFileName   =     "  d:/out1.txt  "  ;
11     String outFileName   =     "  d:/out2.txt  "  ;
12      long   start   =   System.currentTimeMillis();
13       try   {
14         File inFile   =     new   File(inFileName);
15         File outFile   =     new   File(outFileName);        
16         RandomAccessFile inRaf   =     new   RandomAccessFile(inFile,  "  r  "  );
17         RandomAccessFile outRaf   =     new   RandomAccessFile(outFile,  "  rw  "  );             
18         FileChannel infc   =   inRaf.getChannel();
19         FileChannel outfc   =   outRaf.getChannel();             
20         infc.transferTo(  0  , inFile.length(),outfc );             
21         infc.close();
22         outfc.close();
23      } </span>  catch  (Exception e)  {
24         e.printStackTrace();
25     } </span>
26      long   end   =   System.currentTimeMillis();
27      long   time  =  end  -  start;
28     System.out.println(time);</span></span>

 本文由用戶 ck2265395 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!