System.in.read()有什么用?
在java中System.in.read()
什么用?
请解释一下。
可能是这个例子会帮助你。
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"); } } }
两年半迟到比从未好,对吧?
int System.in.read()
从inputstream中读取下一个字节的数据。 但是我相信你已经知道了,因为查找起来是微不足道的。 所以,你可能要问的是:
-
为什么当文档说它读取一个
byte
时声明返回一个int
? -
为什么它似乎返回垃圾? (我input
'9'
,但是返回57
)
它返回一个int
因为除了一个字节的所有可能值之外,它还需要能够返回一个额外的值来指示stream结束。 所以,它必须返回一个可以表示比byte
更多的值的types。
注意:他们本可以short
,但是他们selectint
来代替int
,可能是C的历史意义的一顶帽子,它的getc()
函数也返回一个int
,但更重要的是因为short
对于C来说有点麻烦(语言不提供指定short
文字的方法,所以你必须指定一个int
文字并将其short
),在某些体系结构中int
性能优于short
。
它看起来是垃圾回收,因为当你将一个字符视为一个整数时,你所看到的是该字符的ASCII (*)值。 所以,一个'9'显示为57.但是如果你把它投给一个angular色,你会得到'9',所以一切都很好。
想想这样:如果input字符“9”,则期望System.in.read()
返回数字9是无意义的,因为如果您input了'a'
,那么您希望返回的数字是多less'a'
? 显然,字符必须映射到数字。 ASCII (*)是将字符映射到数字的系统。 在这个系统中,字符“9”映射到数字57,而不是数字9。
(*)不一定是ASCII; 它可能是一些其他的编码,如UTF-16; 但在绝大多数编码中,当然在所有stream行的编码中,前127个值与ASCII相同。 这包括所有英文字母数字字符和stream行的符号。
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:
从inputstream中读取一些字节数,并将它们存储到缓冲区数组b中。 实际读取的字节数作为整数返回。 此方法阻塞,直到input数据可用,检测到文件结尾或引发exception。
来自InputStream.html#read()
System.in.read()
从标准input读取。
标准input可用于在控制台环境中从用户获得input,但由于这种用户界面没有编辑function,标准input的交互式使用仅限于教授编程的课程。
标准input的大多数生产使用都是在Unix命令行pipe道内部devise的程序中使用的。 在这样的程序中,程序正在处理的有效载荷来自标准input,程序的结果被写入标准输出。 在这种情况下,标准input不会被用户直接写入,而是另一个程序的redirect输出或文件的内容。
典型的stream水线如下所示:
# list files and directories ordered by increasing size du -s * | sort -n
sort
从标准input读取数据,这实际上是du
命令的输出。 sorting的数据被写入sort
的标准输出,默认情况下在控制台上结束,可以很容易地redirect到一个文件或另一个命令。
因此,标准input在Java中相对较less使用。
它允许你从标准input(主要是控制台)读取数据。 这个问题可能会帮助你。
System.in.read()是System.in类的读取input方法,它是传统操作系统中的“标准input文件”或0。
这个例子应该有帮助? 随着评论,当然> 🙂
警告:在这个段落/post中,人是超常的常见的词
总的来说,我build议使用Scanner
类,因为你可以input大句子,我不完全确定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"); } } }