黑马程序员技术交流社区
标题:
读取数据怎么总是隔一个数
[打印本页]
作者:
不抛弃不放弃
时间:
2013-11-11 00:50
标题:
读取数据怎么总是隔一个数
在在字节数组b里面装了4个字母,然后通过ByteArrayInputStream类读取数组中的字母,代码如下
public static void main (String []args){
byte[] b= new byte[]{'A','B','C','D'};
ByteArrayInputStream in= new ByteArrayInputStream(b);
while(in.read()!=-1){
char c=(char)in.read();
System.out.println(c);
}
}
读取的时候总是隔一个数,输出结果为:B D
这是什么原因?我实在看不出来啥毛病 。。。。。。。
作者:
零下五度的水
时间:
2013-11-11 01:32
while(in.read()!=-1){
判断的时候读取了一个字节
可以这么写:
char c = '';
while ( (c=in.read()) != -1 ) {
Syso: c
作者:
文涛
时间:
2013-11-11 02:02
你使用的是流,也就是说,你read()只要调用一次,流就向后读取了,当你判断while的时候就调用了read(),于是就读取了第一个字母a,但是你没有使用,你又在while当中读取了一个read(),于是就向后顺延,读取了下一个字母B,所以,每次你都跳过了一个就是这个道理
作者:
hel
时间:
2013-11-11 04:18
由于in.read 每次只读取一个字节,
while(in.read()!=-1){ // 在这读取的是A
char c=(char)in.read(); // 在这读取的是B
System.out.println(c); 所以在这输出 B,再读一遍后就是输出D
}
作者:
黄炳期
时间:
2013-11-11 09:11
帖子已分类
作者:
hurryup
时间:
2013-11-11 09:23
2l说的有道理,我帮你改了一下,代码如下:
System.out.println("a="+a+"c="+c);*/
byte[] b= new byte[]{'A','B','C','D'};
ByteArrayInputStream in= new ByteArrayInputStream(b);
//BufferedInputStream buf=new BufferedInputStream(b);
int len=b.length;
while((len=in.read())!=-1){
char c=(char)len;
System.out.println(c);
}
复制代码
作者:
Θ动@咚Θ
时间:
2013-11-11 10:10
哥们你用的是流。当你第一次做while判断(in.read()!=-1)的时候,这里已经read()执行了一遍了,这个时候你的流相当于读过了A已经指向B,这时运行while循环里面的(char)in.read() 恰好是读取了B并输出。同样的,第二次while循环,判断条件(in.read()!=-1)里面read了C后指向了D,再执行while循环里面的(char)in.read()就读取了D,然后输出。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2