Подтвердить что ты не робот

DataInputStream не поддерживает метод readLine()

Я на java 6. Используя DataInputStream in = new DataInputStream(System.in);, чтобы читать ввод пользователя. Когда readLine() устарел. Какова работа для чтения значения пользователя?

DataInputStream in = new DataInputStream(System.in);
int num;
try
{
  num = Integer.parseInt(in.readLine()); //this works

  num = Integer.parseInt(in);  //just in doesnt work.
}
catch(Exception e)
{
}

пожалуйста, объясните, как следует, когда readLine() устарел.

4b9b3361

Ответ 1

InputStream является в основном двоичной конструкцией. Если вы хотите прочитать текстовые данные (например, с консоли), вы должны использовать Reader некоторого описания. Чтобы преобразовать InputStream в Reader, используйте InputStreamReader. Затем создайте BufferedReader вокруг Reader, и вы можете прочитать строку с помощью BufferedReader.readLine().

Другие варианты:

  • Используйте Scanner, построенный вокруг System.in, и вызовите Scanner.nextLine
  • Используйте Console (полученный из System.console()) и вызывайте Console.readLine

Ответ 2

Усталость и альтернативы обычно явно объясняются в javadocs. Так что это будет первое место для поиска ответа. Для DataInputStream вы можете найти здесь здесь. Метод readLine() здесь. Здесь выдержка релевантности:

Устаревшие. Этот метод неправильно преобразовывает байты в символы. Начиная с JDK 1.1, предпочтительным способом чтения строк текста является метод BufferedReader.readLine(). Программы, которые используют класс DataInputStream для чтения строк, могут быть преобразованы в класс BufferedReader, заменив код формы:

    DataInputStream d = new DataInputStream(in);

с:

    BufferedReader d
         = new BufferedReader(new InputStreamReader(in));

Кодировка символов может быть явно указана в конструкторе InputStreamReader.

Scanner, который был введен, поскольку Java 1.5 также является хорошей (и современной) альтернативой.

Ответ 3

Ниже не работает,

num = Integer.parseInt(in);

Вместо этого вы должны использовать:

num = Integer.parseInt(in.readLine());

readLine() будет читать ввод строки до разрыва строки.