0

我设计了一种在 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 的全长)行,然后是同一行的整个流(几百个?)。

有没有更优雅的方法来做到这一点?如果可能的话,一个可能有效的方法。

4

1 回答 1

0

我出轨了。现在我正在输出从文件中读取的每 X 行,其中 X 足够大,可以在每个样本之间给我一个很好的时间延迟。我使用采样程序中的计数来计算出这种情况。

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

最后一点,我将计数初始化为 1 以阻止它输出前十行作为样本。

如果有人有更好的、基于时间的解决方案,请告诉我。

于 2012-10-02T10:44:41.320 回答