java中System.in.read()
的用途是什么?
请解释一下。
答案 0 :(得分:26)
可能这个例子会对你有帮助。
import java.io.IOException;
public class MainClass {
public static void main(String[] args) {
int inChar;
System.out.println("Enter a Character:");
try {
inChar = System.in.read();
System.out.print("You entered ");
System.out.println(inChar);
}
catch (IOException e){
System.out.println("Error reading from user");
}
}
}
答案 1 :(得分:22)
迟到两年半比没有好,对吧?
int System.in.read()
从输入流中读取下一个数据字节。但我相信你已经知道了,因为查找它是微不足道的。那么,你可能会问的是:
为什么声明在文档显示为int
时声明返回byte
?
为什么它似乎返回垃圾? (我输入'9'
,但会返回57
。)
它返回int
,因为除了字节的所有可能值之外,它还需要能够返回一个额外的值来指示流结束。因此,它必须返回一个类型,它可以表达比byte
更多的值。
注意:他们本可以使其成为short
,但他们选择了int
,可能是对C的历史意义的一角,getc()
函数也返回int
,但更重要的是因为short
使用起来有点麻烦,(该语言无法指定short
字面值,因此您必须指定{ {1}}字面意思并将其转换为int
,)以及某些体系结构short
的效果优于int
。
它似乎返回垃圾,因为当您将字符视为整数时,您正在查看的是该字符的ASCII (*)值。所以,'9'显示为57.但如果你把它投射到一个角色,你得到'9',所以一切都很好。
以这种方式思考:如果你输入字符'9',那么期望short
返回数字9是没有意义的,因为如果你输入了数字,那么你期望它返回的数字是多少System.in.read()
?显然,字符必须映射到数字。 ASCII (*)是将字符映射到数字的系统。在这个系统中,字符'9'映射到数字57,而不是数字9。
(*)不一定是ASCII;它可能是一些其他编码,如UTF-16;但在绝大多数编码中,当然在所有流行的编码中,前127个值与ASCII相同。这包括所有英文字母数字字符和流行符号。
答案 2 :(得分:4)
System
是java.lang
包
来自api
源代码的代码示例public final class System {
/**
* The "standard" input stream. This stream is already
* open and ready to supply input data. Typically this stream
* corresponds to keyboard input or another input source specified by
* the host environment or user.
*/
public final static InputStream in = nullInputStream();
}
read()
是抽象类InputStream
/**
* Reads the next byte of data from the input stream. The value byte is
* returned as an <code>int</code> in the range <code>0</code> to
* <code>255</code>. If no byte is available because the end of the stream
* has been reached, the value <code>-1</code> is returned. This method
* blocks until input data is available, the end of the stream is detected,
* or an exception is thrown.
*
* <p> A subclass must provide an implementation of this method.
*
* @return the next byte of data, or <code>-1</code> if the end of the
* stream is reached.
* @exception IOException if an I/O error occurs.
*/
public abstract int read() throws IOException;
简而言之,来自api:
从输入流中读取一些字节并将其存储到 缓冲阵列b。实际读取的字节数返回为 整数。此方法将阻塞,直到输入数据可用,结束 检测到文件,或抛出异常。
答案 3 :(得分:2)
为了补充已接受的答案,您还可以使用System.out.read()
这样:
class Example {
public static void main(String args[])
throws java.io.IOException { // This works! No need to use try{// ...}catch(IOException ex){// ...}
System.out.println("Type a letter: ");
char letter = (char) System.in.read();
System.out.println("You typed the letter " + letter);
}
}
答案 4 :(得分:2)
import java.io.IOException;
class ExamTest{
public static void main(String args[]) throws IOException{
int sn=System.in.read();
System.out.println(sn);
}
}
如果要获取char输入,则必须像这样进行转换:char sn=(char) System.in.read()
该值字节以int形式返回,范围为0到255。但是,与其他语言的方法不同,System.in.read()
一次只读取一个字节。
答案 5 :(得分:1)
System.in.read()
从standard input读取。
标准输入可用于在控制台环境中从用户获取输入,但由于此类用户界面没有编辑功能,因此标准输入的交互式使用仅限于教授编程的课程。
标准输入的大多数生产用途都在旨在在Unix命令行pipelines内工作的程序中。在这样的程序中,程序正在处理的有效负载来自标准输入,程序的结果被写入标准输出。在这种情况下,标准输入永远不会由用户直接写入,它是另一个程序的重定向输出或文件的内容。
典型的管道如下所示:
# list files and directories ordered by increasing size
du -s * | sort -n
sort
从标准输入读取数据,实际上是du
命令的输出。已排序的数据将写入标准输出sort
,默认情况下最终会出现在控制台上,并且可以轻松地重定向到文件或其他命令。
因此,标准输入在Java中相对较少使用。
答案 6 :(得分:1)
这个例子应该有帮助吗?随着评论,当然&gt;:)
警告:此段/邮件中的人是一个过度频繁的词语
总体而言,我建议您使用Scanner
课程,因为您可以输入较大的句子,我不完全确定System.in.read
有这样的方面。如果可能的话,请指正。
public class InputApp {
// Don't worry, passing in args in the main method as one of the arguments isn't required MAN
public static void main(String[] argumentalManWithAManDisorder){
char inputManAger;
System.out.println("Input Some Crap Man: ");
try{
// If you forget to cast char you will FAIL YOUR TASK MAN
inputManAger = (char) System.in.read();
System.out.print("You entererd " + inputManAger + " MAN");
}
catch(Exception e){
System.out.println("ELEMENTARY SCHOOL MAN");
}
}
}
答案 7 :(得分:0)
它允许您从标准输入(主要是控制台)读取。 This SO question可能会对您有所帮助。
答案 8 :(得分:0)
System.in.read()是System.in类的读取输入方法,它是“标准输入文件”或传统操作系统中的0。
答案 9 :(得分:0)
system.in.read()方法读取一个字节并以整数形式返回,但是如果您输入1到9之间的no,它将返回48个以上的值,因为在ascii代码表中,1-9的ascii值为48 -57。 希望会有所帮助。