2013-03-18 97 views
2

我正在開發類似主項目中所需的壓縮實用程序。使用Apache IO的多線程副本IO操作Java

實用程序所做的是接受用戶的請求並開始複製要求製作壓縮文件的所有文件,並最終提供該壓縮文件以便下載回用戶。

現在的問題是,當多個用戶發送請求,然後實用程序啓動一個單獨的線程(最多可以限制的線程數最大限制)。實用程序開始並行複製並變得非常慢,無法使用。

我需要一種方法來解決這個或任何任何方法,以便並行複製應該足夠快。

我使用Apache commons io進行復制和Zip4j庫進行壓縮。

請建議。

+0

你是否測量過緩慢?一些分析性能消失的地方可能有助於確定瓶頸。還有一些代碼會有幫助。 – Markus 2013-03-18 06:25:10

+0

發佈一些代碼。可能你只需要在zip流下添加一個'BufferedOutputStream'。 – EJP 2013-03-18 06:42:18

回答

0
if (!isFresh) { 
    ArrayList<String> foldersNamesToBeZipped = 
      GeneralInfoDownload.getFilesToDownloadForWorkstep(this.map.get("DEPARTMENT")); 
    ArrayList<File> folderFilesToBeZipped = new ArrayList<File>(); 

    for (String name : foldersNamesToBeZipped) { 
     folderFilesToBeZipped.add(new File(MasterPath + System.getProperty("file.separator") + name)); 
    } 

    log.info("****************Copying start TimeStamp***************" + this.map.get("JID")); 
    TDFileUtil.copyFilesToDirectory(folderFilesToBeZipped, 
      new File(toPcFolder.getAbsolutePath() + File.separator 
      + "NEW_ORIGNALS")); 
    } 
} 

GeneralInfoDownload.getFilesToDownloadForWorkstep函數獲取所有要壓縮和下載的文件。

TDFileUtil.copyFilesToDirectory函數裏面使用Apache commons方法copyDirectoryToDirectorycopyFileToDirectory

當只有一個或兩個請求時,它可以正常工作,但當多個請求排隊時,它會變慢。

這是預料之中,但是有任何性能提升可以完成。 (我的意思是說它只是可以忍受的。)

+0

壓縮很好,我可以使用SplitStream下載Parellel。但問題是複製文件。 – 2013-03-18 09:03:58