黑马程序员技术交流社区

标题: ByteArrayInputStream为什么读一个数据隔一个数据????? [打印本页]

作者: 赵志伟    时间: 2012-3-16 09:46
标题: ByteArrayInputStream为什么读一个数据隔一个数据?????
本帖最后由 赵志伟 于 2012-3-16 09:48 编辑

public class Stream {
                public static void main(String[] args){
                        byte[] b=new byte[] {'a','b','c','d'};
                        ByteArrayInputStream in=new ByteArrayInputStream(b);
                        while(in.read()!=-1){
                                char x=(char)in.read();
                                System.out.println(x);
                        }
                }
}
输出结果为:b d
a c怎么没有输出来呢?我查了半天也没有明白为什么?
作者: 李建强    时间: 2012-3-16 11:06
真相只有一个:char是两个字节,byte是一个字节
作者: 谢明    时间: 2012-3-16 15:49
本帖最后由 谢明 于 2012-3-16 15:54 编辑

                        while(in.read()!=-1){
                                char x=(char)in.read();
                                System.out.println(x);

关键在这里  是不是有两个  in.read()  呢  
判断的时候执行了  然后又执行一次 所以少掉了

改成这样试试


int ch=0;
while((ch=in.read())!=-1){
//char x=(char)in.read();
System.out.println((char)ch);
}              
作者: 李成航    时间: 2012-3-16 21:42

可将程序如下修改:

public class Stream {
                public static void main(String[] args){
                        byte[] b=new byte[] {'a','b','c','d'};
                        ByteArrayInputStream in=new ByteArrayInputStream(b);

                          int i=0;
                        while(( i=in.read())!=-1){//楼主这儿用了一次in.read
                                char x=(char)i;//这儿不应该再用一次in.read(),否则他会再向下读一次,返回条件判断中read到的数的下一个数据。
                                System.out.println(x);
                        }
                }
}


楼主的程序会这样执行,循环开始,读到第一个a不为-1,则读a的下一个b,并打印;接下来该读到c也不为-1,则向下读到c的下一个d,并打印。所以结果会是:b d(原因是楼主程序并未要求打印a c)




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