从 Java 文件中读取大量数据
2022-09-02 13:27:37
我有文本文件,其中包含以下形式的数字:1 000 002
123 456
1 2 3 4 5 6 .... 999999 100000
现在我需要读取该数据并将其分配给变量(前两个数字),并将其余所有(1 000 000个数字)分配给数组。int
int[]
这不是一项艰巨的任务,但是 - 这是可怕的缓慢。
我的第一次尝试是:java.util.Scanner
Scanner stdin = new Scanner(new File("./path"));
int n = stdin.nextInt();
int t = stdin.nextInt();
int array[] = new array[n];
for (int i = 0; i < n; i++) {
array[i] = stdin.nextInt();
}
它的工作方式为例外,但执行大约需要7500毫秒。我需要在几百毫秒内获取这些数据。
然后我试过了:java.io.BufferedReader
使用和我在大约1700毫秒内得到了相同的结果,但它仍然太多了。BufferedReader.readLine()
String.split()
如何在不到1秒的时间内读取如此多的数据?最终结果应等于:
int n = 123;
int t = 456;
int array[] = { 1, 2, 3, 4, ..., 999999, 100000 };
根据垃圾神的回答:
StreamTokenizer
解决方案很快(大约需要1400毫秒),但它仍然太慢:
StreamTokenizer st = new StreamTokenizer(new FileReader("./test_grz"));
st.nextToken();
int n = (int) st.nval;
st.nextToken();
int t = (int) st.nval;
int array[] = new int[n];
for (int i = 0; st.nextToken() != StreamTokenizer.TT_EOF; i++) {
array[i] = (int) st.nval;
}
PS. 无需验证。我100%确定文件中的数据是正确的。./test_grz