2012-02-23 96 views
2

我需要閱讀&從壓縮文本文件中寫入大量字符串(每個嚴格線90個字符長)。
還有耗時的任務,以準備輸入/輸出,但可以忽略不計(IO時間要大得多(異形))提高IO性能和速度

這是我使用的代碼:

GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(file)); 
out.write((stringData+NewLineConstant).getBytes()); 

GZIPInputStream in = new GZIPInputStream(new FileInputStream(file)); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in),8192); 
String data = bufferedReader.readLine(); 

的問題需要花費太多時間才能完成。

這也是通過多個用於排序數據的文件(合併排序)完成的。

我能做些什麼來顯着改善性能嗎? (無硬件更改)

+1

如果我正確讀取了這段代碼,那麼您正在寫入一個文件並讀取* same *文件回來?或者我錯了? – ArjunShankar 2012-02-23 11:09:30

+1

啊!你介於兩者之間。你可能會分享更多的代碼嗎?可能會「暴露」加速的機會。 – ArjunShankar 2012-02-23 11:10:50

+1

你需要它快多少? – DNA 2012-02-23 11:13:09

回答

2

您是否有關於這些行中第一個或第二個字符分佈的任何信息?

如果是這樣,您可以一次讀取這個大文件,並且可以基於這些行的第一個或第二個字符創建一到兩個桶(文件)。之後,如果分配是統一的,那麼您可以對這些存儲桶進行排序(這些文件將小於1GB)。

具體它是這​​樣的:

  • 打開大文件(10GB)
  • 開幾十桶文件寫(1爲每個類型的線路:AA,AB,... )
  • 讀取大文件的行,並寫入文件鬥
  • 關閉大文件
  • 關閉鬥文件存儲桶文件
  • 排序(第一AA,AB相比,...),這可以被並行化,並追加他們

一般來說,你應該增加讀緩衝區(8K從一些兆字節)和寫緩存(8K從256K到-512K)。