随机行我有非常巨大的文本文件,1800万线4Gbyte,我想挑选从它的一些随机的线条,我写了下面的代码要做到这一点,但它是缓慢选择从巨大的文本文件
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
int sampleSize =3000;
int fileSize = 18000000;
int[] linesNumber = new int[sampleSize];
Random r = new Random();
for (int i = 0; i < linesNumber.length; i++) {
linesNumber[i] = r.nextInt(fileSize);
}
List<Integer> list = Arrays.stream(linesNumber).boxed().collect(Collectors.toList());
Collections.sort(list);
BufferedWriter outputWriter = Files.newBufferedWriter(Paths.get("output.txt"));
for (int i : list) {
try (Stream<String> lines = Files.lines(Paths.get("huge_text_file"))) {
String en=enlines.skip(i-1).findFirst().get();
outputWriter.write(en+"\n");
lines.close();
} catch (Exception e) {
System.err.println(e);
}
}
outputWriter.close();
}
}
有没有更优雅更快的方法来做到这一点? 谢谢。
这可能是一个代码审查类型的问题 - 我真的不知道。 –
如果这段代码工作正常,那么这个问题就是堆栈溢出问题,但可能对我们的姊妹站点[代码评论](https://codereview.stackexchange.com/)很有帮助。 –