DataInputStream устарел метод readLine () - PullRequest
26 голосов
/ 10 апреля 2011

Я на 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 () устарела.

Ответы [ 3 ]

30 голосов
/ 10 апреля 2011

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

Больше альтернатив:

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

Устаревание и альтернативы обычно уже подробно объяснены в 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 также является хорошей (и современной) альтернативой.

0 голосов
/ 17 августа 2014

Нижеследующее не работает,

num = Integer.parseInt(in);

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

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

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

...