DataInputStream不推荐使用readLine()方法

Som*_*Guy 29 java user-input readline datainputstream

我在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)
{
}
Run Code Online (Sandbox Code Playgroud)

请在不推荐使用readLine()时解释.

Jon*_*eet 32

InputStream从根本上说是一个二元结构.如果要读取文本数据(例如,从控制台),您应该使用Reader一些描述.要将a转换InputStream为a Reader,请使用InputStreamReader.然后创建一个BufferedReader周围的Reader,你可以使用读取一行BufferedReader.readLine().

更多选择:

  • 使用Scanner内置轮System.in,并打电话Scanner.nextLine
  • 使用Console(从中获得System.console())并致电Console.readLine


Bal*_*usC 25

通常已经在javadoc中明确解释了弃用和替代方案.所以这将是第一个寻找答案的地方.对于DataInputStream你可以找到它在这里.该readLine()方法是在这里.这是相关的摘录:

不推荐.此方法无法将字节正确转换为字符.从JDK 1.1开始,读取文本行的首选方法是通过该BufferedReader.readLine()方法.使用DataInputStream该类读取行的程序可以BufferedReader通过替换表单的代码转换为使用该类:

    DataInputStream d = new DataInputStream(in);
Run Code Online (Sandbox Code Playgroud)

有:

    BufferedReader d
         = new BufferedReader(new InputStreamReader(in));
Run Code Online (Sandbox Code Playgroud)

然后可以在构造函数中显式指定字符编码InputStreamReader.

Scanner自Java 1.5中它被引入也是一个很好的(和现代的)替代.