简直要哭了。。。。。遇到的最最最最最诡异的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同一个对象了。用数组作为参数/返回值的时候要注意有时候需要把数组复制一份。