我有这个非常奇怪的问题:我有一个小程序,从套接字读取字节;每当我调试时,程序运行正常;但每次我运行它(就像直接运行它),我得到ArrayIndexOutOfBounds异常。是什么赋予了?我是否对插口读取速度太快?我错过了什么?从一个Java套接字读取字节:获取ArrayIndexOutOfBounds
这里是主():
public static void main(String[] args){
TParser p = new TParser();
p.init();
p.readPacket();
p.sendResponse();
p.readPacket();
p.sendResponse();
p.shutdown();
}
方法INIT是其中i创建用于读取和写入的套接字; 下一个方法(readPacket)是问题开始出现的地方;我读整个缓冲区到一个私人字节数组,所以我可以自由操纵数据;例如,根据在所述数据部分字节我设置一些属性:
public void readPacket(){
System.out.println("readPacket");
readInternalPacket();
setPacketInfo();
}
private void readInternalPacket(){
System.out.println("readInternalPacket");
try {
int available=dataIN.available();
packet= new byte[available];
dataIN.read(packet,0,available);
dataPacketSize=available;
}
catch (Exception e) {
e.printStackTrace();
}
}
private void setPacketInfo() {
System.out.println("setPacketInfo");
System.out.println("packetLen: " +dataPacketSize);
byte[] pkt= new byte[2];
pkt[0]= packet[0];
pkt[1]= packet[1];
String type= toHex(pkt);
System.out.println("packet type: "+type);
if(type.equalsIgnoreCase("000F")){
recordCount=0;
packetIterator=0;
packetType=Constants.PacketType.ACKPacket;
readIMEI();
validateDevice();
}
}
其中它打破是直线的线
PKT [1] =包[1]; (setPacketInfo)
这意味着它只有1个字节在那个时间......但如何能,如果我调试它运行完美?有一些理智的检查,我必须做的插座? (dataIN是DataInputStream类型)
我应该把方法放在单独的线程上吗? ive一遍又一遍地遍历了这个,甚至更换了我的记忆模块(当我开始对此有奇怪的想法时)
...请帮助我。
您是否尝试过打印出可用的?你确定它是1吗?另外,对于内存模块,假设它是你的问题,而不是编译器/ hw,你几乎总是安全的。很高兴思考,但几乎从未如此。 –
现在试图.... – sergio