У меня есть текстовый файл, который содержит 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;
}
PS. Там нет необходимости для проверки. Я на 100% уверен, что данные в ./test_grz
файле верны.