2011-08-24 77 views
1

所以我有從Amazon S3下載文件的下列方法,現在它正在工作,但我預計未來我將不得不處理相當大的文件--2-3千兆字節。那麼您會推薦哪些性能優化?還有關於一些關於java中的文件I/O的一般概念的鏈接不僅適用於我的情況,而且總的來說將會非常感謝。優化文件下載

public static void fetchFileFromS3(String filePath, String outPath) { 
    int size = 5 * 1024 * 1024; //use 5 megabytes buffers 
    byte bufSize[] = new byte[size]; 
    FileOutputStream fout = null; 
    BufferedOutputStream bufOut = null; 
    BufferedInputStream bufIn = null; 
    String[] result = getRealPath(filePath); 
    S3Object object = Utilities.getS3Instance().getObject(new GetObjectRequest(result[0], result[1])); 

    try { 
     fout = new FileOutputStream(outPath); 
     bufOut = new BufferedOutputStream(fout, size); 
     bufIn = new BufferedInputStream(object.getObjectContent(), size); 
     int bytesRead = 0; 
     while((bytesRead = bufIn.read(bufSize)) != -1) { 

      bufOut.write(bufSize, 0, bytesRead); 


     } 

     System.out.println("Finished downloading file"); 

     bufOut.flush(); 
     bufOut.close(); 
     bufIn.close(); 

    } catch (IOException ex) { 
     Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 
+0

你能否說下載速度還是磁盤速度會成爲瓶頸?在很多情況下,後者遠不如前者那麼重要,所以不需要獲得更多的帶寬。 –

+0

既然鏈接是10GE,而且磁盤是一個巨大的磁盤陣列,那麼這兩個都不是瓶頸,至少當沒有爭用時。在這種情況下,我更加好奇不要在代碼中引入瓶頸。 – LordDoskias

回答