隨機行我有非常巨大的文本文件,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/)很有幫助。 –