我在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()时解释。
答案 0 :(得分:30)
InputStream
基本上是二元构造。如果您想阅读 text 数据(例如,从控制台),您应该使用Reader
的某些描述。要将InputStream
转换为Reader
,请使用InputStreamReader
。然后在BufferedReader
周围创建一个Reader
,您可以使用BufferedReader.readLine()
读取一行。
更多替代方案:
答案 1 :(得分:25)
通常已在javadocs中明确说明了弃用和替代方案。所以这将是第一个寻找答案的地方。对于DataInputStream
,您可以找到它here。 readLine()
方法为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)