黑马程序员技术交流社区
标题:
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