Я ищу наиболее эффективный по времени способ чтения STDIN построчно.
Первая строка - это количество условий для проверки. Все следующие строки являются условиями (строками) длиной не более 100 000 символов.
Я уже пробовал следующее (плюс результат для 4 раз по 90 000 символов:
Сканер с циклом while (7255 мс)
Scanner sc = new Scanner (System.in);
int numberOfLines = Integer.parseInt (sc.nextLine ());
длинный старт = 0;
int я = 1;
while (i <= numberOfLines) {
start = System.currentTimeMillis ();
sc.nextLine ();
Debug.println ((System.currentTimeMillis () - start) + «мс для сканера пока»);
я ++;
}
Сканер с циклом for (7078 мс)
Scanner sc = new Scanner ( System.in);
int numberOfLines = Integer.parseInt (sc.nextLine ());
длинный старт = 0;
for (int i = 1; i <= numberOfLines; i ++) {
start = System.currentTimeMillis ();
sc.nextLine ();
Debug.println ((System.currentTimeMillis () - start) + «мс для сканера для»);
// i ++;
}
BufferedReader с циклом for (7403 мс)
try {
BufferedReader br = новый BufferedReader (новый InputStreamReader (System.в));
int numberOfLines = Integer.parseInt (br.readLine ());
длинный старт = 0;
for (int i = 0; i
}
BufferedReader с циклом while (7461 мс)
try {
BufferedReader br = новый BufferedReader (новый InputStreamReader (System.in));
int numberOfLines = Integer.parseInt (br.readLine ());
int я = 0;
длинный старт = 0;
while (i
}
При отладке затраченного времени я заметил, что время, затрачиваемое на чтение, уменьшается после каждого чтения. Можно ли ограничить инициализируемые байты (например, если у вас есть максимум 100000 символов, ограничьте сканер / буферизатор для инициализации только 100 000 символов. После чтения ему необходимо будет заполнить себя следующими 100 000 символов)
Любые идеи по этому поводу более чем приветствуются.
РЕДАКТИРОВАТЬ: Добавлен код для каждого сценария с указанием времени, затрачиваемого на чтение строки. Также поменял 100.От 000 до 100 000, чтобы было легче читать.