日期:2014-05-20  浏览次数:20739 次

简直要哭了。。。。。遇到的最最最最最诡异的java问题!!
这次真是跪了。。。。原来基本都是在百度知道上问,,,这次实在不行了来找csdn上的各位。。。
谁要是把它解决了小弟真是跪谢了!!


问题是这样的,输入流的read方法居然莫名其妙的改变了我其中一个变量的值!!而我这个变量明明和它没关系啊!!
还别不信各位大神,上代码


byte[] bytes=new byte[]{12,34,56,78,12,34,56,78};  //用作输入流的byte组

InputStream is=new ByteArrayInputStream(bytes);  //将byte组封装成输入流

int tmp;
byte[] bytesRes = new byte[2];               //每次读取两个字节
byte[] Data = new byte[0];                       //用来储存总数据的Data,出现状况的变量就是它

tmp =0;
while (true) {
System.out.println(" \n  Data是  \n   ");
for(byte b:Data){System.out.print("  "+b);}       //打印Data   1号

tmp = is.read(bytesRes);                                  //读入数据

System.out.println(" \n  read后Data是  \n   ");
for(byte b:Data){System.out.print("  "+b);}       //打印Data   2号

if(tmp==-1){break;}                                              //读入完成就退出循环
Data=hebing(Data, bytesRes, tmp);               // 函数hebing是把bytesRes前tmp个字节加入Data中返回
}

就是这样了,在程序运行时,Data1号居然和Data2号打印出了不一样的数据??!!太匪夷所思了!!
   Data是  
   
  12  34 
  read后Data是  
   
  56  78 

就是这样的。。。我已经实在无语凝噎了。。。。。

------解决方案--------------------
System.out.println(bytesRes);
tmp = is.read(bytesRes);
System.out.println(Data);
System.out.print("read后Data是");

问题应该在hebing函数里  这个函数之后Data和bytesRes是同一个对象了
------解决方案--------------------
中间bytesRes和Data同一个对象了。用数组作为参数/返回值的时候要注意有时候需要把数组复制一份。