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