A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 权跃杰 中级黑马   /  2012-8-4 19:51  /  988 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class TestMain {

        public static void main(String[] args) throws IOException
        {
                int date;
                while((date=System.in.read())!=-1)
                {
                  System.out.write(date);
                }
               
          //这段程序的详细的执行流程是怎么样的?
         //System.in.read()是阻塞式的,只有输入数据,按下回车才可读取数据
         //输入"www.csdn.net",按下回车。第一次循环,读取一个字节('w'),然后写到缓存里。
         //第二次循环我感觉还应该发生阻塞啊,为什么可以直接读了?
        }
}

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 我是临时工

查看全部评分

2 个回复

倒序浏览
System.in是等待用户输入回车后,将用户输入的这一行信息一起放到内存里,来进行读取.
所以第一次执行到这里时,发现内存中没有数据,则阻塞,等待用户输入,
当用户输入一部分信息,点回车后,内存中包含了这些信息(你这里就是www.crazyit.org) ,
这时System.in因为发现内存中有数据,因此开始读取,
这里是一次读取一个字符,所以第一次循环读取了'w',打印后开始第二次循环,
这时内存中仍然后这个'w'之后的数据,所以仍然可以继续读取,依次类推,
直到将这里的所有字符都打印后,数据又不存在,则阻塞等待下次输入。

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 我是临时工

查看全部评分

回复 使用道具 举报
这个就要说道说道System类的字段了
in是System中的字段,是InputStream类型的标准输入流
它的存在就相当于一个参数传递装置
而且in的类型是InputStream默认设备是键盘
所以当你从键盘输入一串数据时,用in.read()读入一个字节
配合while使用就会形成连续读取所有从键盘输入的字节的效果
所以他会把你从键盘输入的所有数据都读取完毕直到返回-1
希望对你有所帮助。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马