我本地机java版本是“1.5.0_11”,服务器上使用的是“1.6.0_13”同样的代码在本地可以运行,可是到了服务器上报的错误是“数组越界”,这也版本有关系吗???
下面是我的代码:
byte[] rb = new byte[pack.length-8];
System.arraycopy(pack, 0, rb, 0, pack.length-8);
int flen=rb.length;
byte[] temp=new byte[8];
byte[] out=new byte[8];
int j = flen % 8;
String tempPack=new String(rb);
System.out.println("tempPack长度:"+tempPack.length());
if(j==0){
j=flen / 8;
}else{
j=(flen / 8 + 1);
}
for(int m = 0; m < j*8-flen; m ++){
tempPack+=StaticString.END_FLAG;
}
byte[] tmp=tempPack.getBytes();
System.arraycopy(pack, 22, tmp, 22, 8);
for (int i = 0; i < j; i++){
for (int k = 0; k < 8; k++){
temp[k] ^= tmp[i*8+k];
}
}
上面红字部分在本地打印出来的长度是“30”,在服务器上的长度是“27”,其中rb里的内容是从同一个测试机发送过来的。
这是为什么???
下面是我的代码:
byte[] rb = new byte[pack.length-8];
System.arraycopy(pack, 0, rb, 0, pack.length-8);
int flen=rb.length;
byte[] temp=new byte[8];
byte[] out=new byte[8];
int j = flen % 8;
String tempPack=new String(rb);
System.out.println("tempPack长度:"+tempPack.length());
if(j==0){
j=flen / 8;
}else{
j=(flen / 8 + 1);
}
for(int m = 0; m < j*8-flen; m ++){
tempPack+=StaticString.END_FLAG;
}
byte[] tmp=tempPack.getBytes();
System.arraycopy(pack, 22, tmp, 22, 8);
for (int i = 0; i < j; i++){
for (int k = 0; k < 8; k++){
temp[k] ^= tmp[i*8+k];
}
}
上面红字部分在本地打印出来的长度是“30”,在服务器上的长度是“27”,其中rb里的内容是从同一个测试机发送过来的。
这是为什么???
解决方案 »
- 如何根据枚举的字符串获取值
- Sql Server 2005不能连接成功????急救……
- 帮帮我!!!只想把左右分开显示互不影响!但是右键菜单不出来,为什么????????
- java运行那时报的一个错。
- jsp页面中 生成一个年份的下拉框
- swt项目导出为jar后运行问题,急~~~
- 超级问题。java是否可以调用windows的com组件或api,以及C++是否可以调用java的class文件以及ejb组件
- 初学java,大家能否帮我看看下面这小段代码到底哪儿错了?
- 请问Jbuilder最新版是多少?网上哪有下~大恩不言~谢了,哥哥姐姐们!!
- 请问如何在JBuilder4中使用ActiveX控件
- 高分求助
- 重写方法的小疑问
System.arraycopy(pack, 0, rb, 0, pack.length-8);
定义的数组的长度是通过表达式计算得出的,可能是因为第一句执行完后,pack被修改了,第二句pack.length时取到的值比第一次大,导致arraycopy()执行时数组越界
是这里在做循环运算时出的错误:
for (int i = 0; i < j; i++){
for (int k = 0; k < 8; k++){
temp[k] ^= tmp[i*8+k];
}
}
当i=3时,K循环到3时,tmp[i*8+k]这个越界啦,因为服务器上temp的长度只有“27”。
其中pack是个byte数组,它的内容我分别在服务器上和本地机都打印出来啦,是一模一样的。
String tempPack=new String(rb);
tempPack这个字符串的内容我也打印出来看了一下,前面都一样,到了结尾是,有点不一样。
谁能帮我解释一下呀。