DataInputStream不推荐使用readLine()方法

时间:2011-04-10 11:17:50

标签: 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)
{
}

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

4 个答案:

答案 0 :(得分:30)

InputStream基本上是二元构造。如果您想阅读 text 数据(例如,从控制台),您应该使用Reader的某些描述。要将InputStream转换为Reader,请使用InputStreamReader。然后在BufferedReader周围创建一个Reader,您可以使用BufferedReader.readLine()读取一行。

更多替代方案:

  • 使用Scanner内置System.in,并致电Scanner.nextLine
  • 使用Console(从System.console()获取)并致电Console.readLine

答案 1 :(得分:25)

通常已在javadocs中明确说明了弃用和替代方案。所以这将是第一个寻找答案的地方。对于DataInputStream,您可以找到它herereadLine()方法为here。以下是相关摘录:

  

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

    DataInputStream d = new DataInputStream(in);
     

使用:

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

然后可以在InputStreamReader

的构造函数中显式指定字符编码

自Java 1.5以来引入的Scanner也是一个很好的(和现代的)替代方案。

答案 2 :(得分:0)

以下不起作用,

num = Integer.parseInt(in);

相反,你应该使用:

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

readLine()将读取行的输入,直到换行。

答案 3 :(得分:0)

在scala中调用 readLine 命令将返回“警告:存在一个弃用警告;请使用-deprecation重新运行以获取详细信息”消息。

您可以按照以下说明处理此警告

val hadoopConfig = spark.sparkContext.hadoopConfiguration
val hdfs = org.apache.hadoop.fs.FileSystem.get(hadoopConfig)
val destinationFile = new org.apache.hadoop.fs.Path(s"hdfs://...")
val outFile = hdfs.open(destinationFile)

val wholeStream = Array.fill[Byte](outFile.available)(0)
outFile.readFully(wholeStream,0,outFile.available)
return new String(wholeStream)