この非常に奇妙な問題があります。ソケットからバイトを読み取る小さなプログラムがあります。 私はいつでもデバッグしていますが、プログラムは正常に動作します。私はそれを(それをまっすぐ実行するように)実行するたびに、私は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があります。 次のメソッド(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型)
別スレッドにメソッドを配置する必要がありますか?これを何度も繰り返して、私の記憶モジュールを交換しても(私が奇妙なアイディアを持ち始めたとき)
...助けてください。
はあなたが利用可能プリントアウトしようとしたことがありますか?それが1だと確信していますか?また、メモリモジュールでは、コンパイラ/ hwではなく、あなたの問題であると仮定すると、ほとんど常に安全です。思うのはいいですが、決してそうではありません。 –
これをしようとしています.... – sergio