我有一个文本文件,其中包含以下格式的1 000 002
个数字:
123 456
1 2 3 4 5 6 .... 999999 100000
现在我需要读取这些数据并将它们分配给
int
变量(前两个数字)和所有其余的数字(1,000,000个数字)分配到一个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
:
使用BufferedReader.readLine()
和String.split()
,我在约1700毫秒内获得了相同的结果,但仍然太多。
如何在不到1秒的时间内读取这么多数据?最终结果应该等同于:
int n = 123;
int t = 456;
int array[] = { 1, 2, 3, 4, ..., 999999, 100000 };
根据trashgod的回答:
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;
}
注意:无需验证。我100%确定./test_grz
文件中的数据是正确的。