2012-10-02 13 views
0

我設計了一種在java中進行油藏採樣的方法,我使用的代碼是here在java中基於時間的油藏採樣?

我已經投入了巨大的文件中讀取了,這需要大約40秒讀很多出來之前把結果屏幕,然後再次讀取不少。該文件太大而無法存儲在內存中,只需從中選擇一個隨機樣本。

我希望我可以在那裏寫一個額外的while循環讓它在設定的時間段內放置我的reservoirList,而不是在它完成掃描文件之後。

喜歡的東西:

long startTime = System.nanoTime(); 
timeElapsed = 0; 
while(sc.hasNext()) //avoid end of file 
    do{ 
     long currentTime = System.nanoTime(); 
     timeElapsed = (int) TimeUnit.MILLISECONDS.convert(startTime-currentTime, 
       TimeUnit.NANOSECONDS); 
     //sampling code goes here 
    }while(timeElapsed%5000!=0) 
    return reservoirList; 
} return reservoirList; 

但這輸出同一行線的一堆(不是我ReservoirList全長),然後整體流(幾百?)。

有沒有更好的方法來做到這一點?或許,如果可能的話,它也可以起作用。

+0

你有沒有考慮這樣做的同時,通過共享閱讀之間的併發收集和編寫線程? –

+0

@DavidGrant我沒有真正涉足併發。我會研究它。 – Pureferret

+0

這可能很有用:http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html –

回答

0

我欺騙了。現在我輸出從文件中讀取的每個X行,其中X足夠大,以便在每個樣本之間給出一個很好的時間延遲。我使用抽樣程序中的計數來確定這是什麼時候。

do { 
    //sampling which includes a count++ 
}while(count%5000!=0) 

最後一個音符,我intialise計數到1停止輸出前10行作爲示例。

如果任何人有更好的,基於時間的,解決方案,讓我知道。