关于System.in如何执行的问题

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的用户输入。

 

posted @ 2018-02-07 16:08  系统攻城狮  阅读(1355)  评论(0编辑  收藏  举报