У меня есть текстовый файл, содержащий 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
верны.