public int ParseMessage(byte[] inbuf,int index)
{
int result = -1;
try
{
int flag = 0;
int checksum = 0;
if(inbuf[index] != BaseMessage.FRAME_START)  //这一行报数组越界
{
Log.d(TAG, " cmd not frame start");
return result;
}
flag ++;
cmd = inbuf[index + 1];
isParseCMD = 1;
flag ++;
buflen = inbuf[index + 2];
flag++;
buf = new byte[buflen];
System.arraycopy(inbuf, index + 3, buf, 0, buflen);
flag = flag + buflen;
checksum = cmd + buflen;
for(int i= 0; i < buflen; i++)
{
checksum = checksum + buf[i];
}
if(checksum != inbuf[index + 3 + buflen])
{
Log.d(TAG, " cmd check sum error");
return result;
}
flag ++;
if(inbuf[index + flag] != BaseMessage.FRAME_END)
{
Log.d(TAG, " cmd frame end error");
return result;
}
flag++;
isOk = 1;
return flag;
}
catch(Throwable te)
{
te.printStackTrace();
return -1;
}
public static void ReadString()

{
FileReader fr = null;
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(DEV);

int tempv = in.read(buf);
in.close();
in = null;
if(tempv > 0)
{
Log.d(TAG, "the tempv is: " + tempv);
int i = 0;
/*
while(i < tempv)
{
Log.d(TAG, " the " + i + " value is: " + (int)buf[i]);
i++;
}
*/
int flag = 0;
while((tempv - flag) > 0)
{
BaseRecMessage brm = new BaseRecMessage();

int leng;
// try {
leng = brm.ParseMessage(buf, flag);  //这一行调用了报数组越界的方法
if(leng > 0)
{
PlayerEvent pe = new PlayerEvent();
pe.setEventType(PanelItemEventType.SERIAL_MSG);
pe.setEventArgs(brm);
DeviceInfo.getInstance().getPlayerEvent().offer(pe);
Log.d(TAG, "the cmd " + brm.getCmd() + " leng is: " + leng);
}
else
{
Log.d(TAG, "parse message occur error");
}
// } catch (Exception e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }



try
{
out = new FileOutputStream(DEV);
BaseSendMessage bsm = brm.getSendMessage();
if(bsm != null)
{
out.write(bsm.getSendBuf());
}
out.close();
out = null;
}
catch(Throwable te)
{
te.printStackTrace();
}
finally
{
if(out != null)
{
try
{
out.close();
out = null;
}
catch(IOException e)
{
e.printStackTrace();
}
}
}

flag += leng;
}
}
else
{
sleep(100);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(fr != null)
{
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(in != null)
{
try {
in.close();
in = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(out != null)
{
try
{
out.close();
out = null;
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}

解决方案 »

  1.   

    应该是index的大小超过了inbuf的长度了吧。更多内容参见:http://dalvik.co.cc
      

  2.   


    http://dalvik.co.cc这里面的哪一篇啊。。很多呀。。
      

  3.   

    if(inbuf[index] != BaseMessage.FRAME_START)  //这一行报数组越界把index打出来看看,你就知道错在哪里了。
      

  4.   

    if(inbuf[index] != BaseMessage.FRAME_START)  //这一行报数组越界你把index打印出来,看看就知道什么原因了