Java中的IO的性能优化

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           }  

12         }  
    catch    (IOException e)    {
13       }  

14          long    end    =    System.currentTimeMillis();
15          long    time   =   end   -   start;
16       System.out.println(time);
17   }  

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           }  

29           fis.close();
30         }  
    catch    (IOException e)    {
31       }  

32          long    end    =    System.currentTimeMillis();
33          long    time   =   end   -   start;
34       System.out.println(time);
35   }


方法一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         }  
    catch    (Exception e)    {
 6            e.printStackTrace();
 7       }  

 8   }  

 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         }  
    catch    (Exception e)    {
24           e.printStackTrace();
25       }  

26          long     end     =     System.currentTimeMillis();
27          long     time    =    end    -    start;
28       System.out.println(time);
29   }

更多信息请查看 java进阶网 http://www.javady.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值