我有這個非常奇怪的問題:我有一個小程序,從套接字讀取字節;每當我調試時,程序運行正常;但每次我運行它(就像直接運行它),我得到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