我设计了一种在 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 的全长)行,然后是同一行的整个流(几百个?)。
有没有更优雅的方法来做到这一点?如果可能的话,一个可能有效的方法。