黑马程序员技术交流社区

标题: 字节流操作 [打印本页]

作者: 赵许星    时间: 2013-11-4 14:44
标题: 字节流操作
看下面代码
InputStream in = System.in;
int ch = 0;
while((ch=in.read()) != -1)
{
        System.out.println(ch);
}

结果:
当输入abc(换行符),
为何出来的是
97
98
99
13
10
不应该只有
97
才对嘛,因为定义的int ch,一次只能接受一个字符
作者: Mr.Z.Lee    时间: 2013-11-4 14:50
本帖最后由 Mr.Z.Lee 于 2013-11-4 14:53 编辑

因为回车键,换行符也是字符啊,你可以对回车键做测试就知道输出13
作者: 赵许星    时间: 2013-11-4 15:09
Mr.Z.Lee 发表于 2013-11-4 14:50
因为回车键,换行符也是字符啊,你可以对回车键做测试就知道输出13

重点是:“因为定义的int ch,一次只能接受一个字符”
作者: 咸鱼要吃猫    时间: 2013-11-4 15:14
赵许星 发表于 2013-11-4 15:09
重点是:“因为定义的int ch,一次只能接受一个字符”

就是因为一次只能接受一个字符,  你又是一个while循环     
所以会把 你的 'a' 'b' 'c' 换行符 回车  一个个都输出。。。。
作者: 麦者    时间: 2013-11-4 16:01
本帖最后由 麦者 于 2013-11-4 18:05 编辑

在上面的流中其实是有指针的,刚开始指针的位置在流的头部就是97的前面, 当你第一个读过之后,指针就相应递增到97和98之间,由于是while循环,所以
当出口条件:in.read()!=-1不满足时,read()方法会一直执行的,所以输出的
是5个字符(有两个是换行符)。




作者: 卑微の小幸福    时间: 2013-11-4 16:05
重点是:“因为定义的int ch,一次只能接受一个字符”
但是你写的是循环while,当然会全部read。呵呵




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