黑马程序员技术交流社区

标题: io问题 [打印本页]

作者: 权跃杰    时间: 2012-8-4 19:51
标题: io问题
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'),然后写到缓存里。
         //第二次循环我感觉还应该发生阻塞啊,为什么可以直接读了?
        }
}

作者: 创出一片辉煌    时间: 2012-8-4 19:55
System.in是等待用户输入回车后,将用户输入的这一行信息一起放到内存里,来进行读取.
所以第一次执行到这里时,发现内存中没有数据,则阻塞,等待用户输入,
当用户输入一部分信息,点回车后,内存中包含了这些信息(你这里就是www.crazyit.org) ,
这时System.in因为发现内存中有数据,因此开始读取,
这里是一次读取一个字符,所以第一次循环读取了'w',打印后开始第二次循环,
这时内存中仍然后这个'w'之后的数据,所以仍然可以继续读取,依次类推,
直到将这里的所有字符都打印后,数据又不存在,则阻塞等待下次输入。
作者: 侯宪博    时间: 2012-8-4 23:25
这个就要说道说道System类的字段了
in是System中的字段,是InputStream类型的标准输入流
它的存在就相当于一个参数传递装置
而且in的类型是InputStream默认设备是键盘
所以当你从键盘输入一串数据时,用in.read()读入一个字节
配合while使用就会形成连续读取所有从键盘输入的字节的效果
所以他会把你从键盘输入的所有数据都读取完毕直到返回-1
希望对你有所帮助。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2