黑马程序员技术交流社区

标题: 读取数据怎么总是隔一个数 [打印本页]

作者: 不抛弃不放弃    时间: 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说的有道理,我帮你改了一下,代码如下:
  1. System.out.println("a="+a+"c="+c);*/
  2.                 byte[] b= new byte[]{'A','B','C','D'};
  3.                
  4.                    ByteArrayInputStream  in= new ByteArrayInputStream(b);
  5.                 //BufferedInputStream buf=new BufferedInputStream(b);
  6.                 int len=b.length;
  7.                
  8.                    while((len=in.read())!=-1){
  9.                    char c=(char)len;
  10.                   System.out.println(c);
  11.                 }
复制代码

作者: Θ动@咚Θ    时间: 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