Буферизация с помощью сканера на System.in в Java

У меня проблема со сканером в Java. У меня есть метод разбора System.in и создание объекта базируется на этих данных. Но если я создам Scanner внутри метода у меня есть 2 способа сделать это, то есть с закрытием и без. В первом случае Scanner.close() закрывается System.in Кроме того, в противном случае он буферизуется заранее, и буферизованные символы становятся недоступными для другого сканера. Так что теперь я прохожу Scanner экземпляр в метод. Но это не может быть надежно, если вам нужно прочитать с консоли другой объект, например, через BufferedReader, Кроме того, кажется, что это не совсем чистое дизайнерское решение.

2 ответа

Определить BufferedReader и передать его вашим методам. Используйте его, чтобы прочитать строки в строку и прикрепить Scanner к этому вместо System.in,

Я предполагаю, что дизайн считал, что только один Reader или же Scanner действительно может прочитать InputStream (System.in) за один раз, поэтому, имея несколько Readers на нем бесполезен (поскольку он также потребляет поток), что делает возможным закрыть базовый InputStream,

Изменить: одно из решений заключается в использовании InputStream напрямую (read()) и обработать чтение байтов самостоятельно. Например String имеет конструктор String(byte[]) что вы можете использовать вместе с substring() вернуть только те части, которые не были использованы.

Другие вопросы по тегам