import java.io.IOException; public class Test1 { public static void main(String[] args) throws IOException { System.out.println("请输入:"); int i = 0; while(i!=-1){//读取输入流中的字节直到流的末尾返回1 i = System.in.read(); System.out.println(i); } } }
在使用system.in运行上述代码时,控制台的光标会一直停留在输入的状态,而不是像普通的程序一样,执行完,就退出。这是为什么么呢?
这就涉及到IO inputStream outputStream 的原理。
InputStream OutputStream 和他们的缓冲器。 都相当于一条管道。 Buffer 相当于一个水池,或者说一个大的水管。
当 System.in.read(); 的时候 管道会向来源方 抽水(索取一行字符串) 会一直等到有水来了为止。(阻塞,一直等待) 而管道那头连接的是 用户输入(System.in)
所以当你调用 System.in.read(); 的时候。 就相当于会向管道的那头System.in 索取一行数据。
所以程序会一直循环跳到System.in那行,从没关闭的通道 里 获取System.in的用户输入。