У меня очень странная проблема: у меня есть небольшая программа, которая читает байты из сокета;всякий раз, когда я отлаживаю, программа работает нормально;но каждый раз, когда я запускаю его (например, прямо), я получаю исключение ArrayIndexOutOfBounds.что дает?я читаю это слишком быстро для сокета?я что-то упустил?
вот main ():
public static void main(String[] args){
TParser p = new TParser();
p.init();
p.readPacket();
p.sendResponse();
p.readPacket();
p.sendResponse();
p.shutdown();
}
Метод init - это то, где я создаю сокеты для чтения и записи;Следующий метод (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] = packet [1];(setPacketInfo)
означает, что он имеет только 1 байт в то время ... но как это может быть, если я отлаживаю его, он работает отлично?Есть ли какая-то проверка работоспособности, которую я должен сделать на розетке?(dataIN имеет тип DataInputStream)
я должен поместить методы в отдельные потоки?Я перебирал это снова и снова, даже заменял свои модули памяти (когда у меня появились странные идеи по этому поводу)
... пожалуйста, помогите мне.