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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵志伟 于 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怎么没有输出来呢?我查了半天也没有明白为什么?

3 个回复

正序浏览

可将程序如下修改:

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)

评分

参与人数 1黑马币 +2 收起 理由
赵志伟 + 2

查看全部评分

回复 使用道具 举报
本帖最后由 谢明 于 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);
}              

评分

参与人数 1黑马币 +2 收起 理由
赵志伟 + 2

查看全部评分

回复 使用道具 举报
真相只有一个:char是两个字节,byte是一个字节
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马