当前位置: 首页 > 知识库问答 >
问题:

Java中关于System.in的read()方法行为的混淆

武元白
2023-03-14

我知道System类的System.In是InputStream的一个具体子类的实例,因为InputStream的read()方法是抽象的,System.In必须重写这个方法。根据关于InputStream的read()方法的文档:

从输入流中读取下一个字节的数据。值字节以0到255范围内的int形式返回。如果由于已到达流的结尾而没有可用的字节,则返回值-1。此方法将阻塞,直到输入数据可用、检测到流的末尾或引发异常为止。
子类必须提供此方法的实现。

返回:
数据的下一个字节,如果到达流的末尾,则返回-1。

抛出:
IOException-如果发生I/O错误。

import java.io.*;

class SystemInTest{
    public static void main(String[] args) throws IOException{
        InputStream in = System.in;
        //InputStream in = new FileInputStream("h.txt");

        int ch = 0;
        while((ch = in.read()) != -1){
            System.out.println(ch);
        }
    }
}
97
98
99
10

system.in.read()永远不会返回-1是真的吗?如果是这样,为什么System.read()方法的实现与InputStream的其他子类(如FileInputStream)不同?

共有1个答案

潘坚白
2023-03-14

Enter只表示完成了一行,并不表示完成了整个“文件”。

如何完成文件取决于操作系统。在Linux上,它是Ctrl+D,您可以在许多程序中使用它退出它们(而不是键入exitquit)。在Windows上,它是Ctrl+Z

 类似资料:
  • 我正在阅读关于线程的oracle java教程,我看到了这个示例 当有人可能使用这些方法签入他们的代码时?thread.interrupt(标志)是静态的,所以通过上面的检查,我们实际上检查是否有任何踏面被中断了?即使是这样,根据教程,当线程通过调用静态方法thread.interrupted检查中断时,中断状态将被清除。或任何通过抛出InterruptedException退出的方法在这样做时将

  • 问题内容: 我正在使用a ,但是在发生碰撞时该方法的工作原理还没有得到一个直接的答案。 假设对象放置在相同的 键中 。它们存储在吗?它们是否被覆盖,以便仅存在该键中的最后一个对象存在?他们在使用其他碰撞方法吗? 如果将它们放在中,是否可以检索整个列表?如果不是,是否有其他 Java 内置地图可以在其中执行? 就我的目的而言,单独的链接将是理想的,就好像有冲突一样,我需要能够浏览列表并获取有关列表中

  • 问题内容: 嘿,我只是在Java文档上浏览I / O流上的内容,而刚刚遇到了专门针对字节流的问题-如果输入是字节流,为什么read()不返回字节值? 我挠了一下头,但想不出任何有力的答案,如果有人能帮助我将不胜感激。 问题答案: 这是因为可以返回-1作为流结束(EOF)标记的指示符-即不再需要从流中读取字节。 更多详细信息:http : //download.oracle.com/javase/1

  • 我对这个方法引用语法有点困惑。 需要一个双函数,然而,尽管温度较高,lessThanTemp仍然是有效的参数。lessThanTemp()只接受一个参数。 这一行到底发生了什么:? MCVE:

  • 我正在测试