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行的符号。

Systemjava.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"); } } }