當我運行以下代碼時,出現'數組越界'異常。基本上我從客戶端發送兩個TLV編碼的字符串到服務器,服務器解碼TLV編碼的值並將它們打印到屏幕上。ArrayOutOfBoundsException解碼消息時
an error has occurred
java.lang.ArrayIndexOutOfBoundsException: 1
at ServerConnection.run(Server.java: 131)
At java.lang.Thread.run(Unknown Source)
我將不勝感激:當我運行該程序
代碼來打印解碼值
在TLV類byte[] from_ca = new byte[65536];
int msg = is.read(from_ca, 0, 65536);
from_ca = Arrays.copyOfRange(from_ca, 0, msg);
Object[] decodeBytes = TLV.decode(from_ca);
String ca_id = (String) decodeBytes[0];
String cb_id = (String) decodeBytes[1];
碼解碼
public static Object[] decode(byte[] data) throws Exception {
int i = 0;
List<Object> tlvList = new ArrayList<Object>();
while (i < data.length) {
if (data[i] == TLV.ascii) {
int length = (256 * data[i + 2]) + data[i + 1];
tlvList.add(new String(Arrays.copyOfRange(data, i + 3, i + 3 + length), "US-ASCII"));
i = i + 3 + length;
} else if (data[i] == TLV.integer) {
int length = (256 * data[i + 2]) + data[i + 1];
tlvList.add(Integer.parseInt(new String(Arrays.copyOfRange(
data, i + 3, i + 3 + length), "US-ASCII")));
i = i + 3 + length;
} else if (data[i] == TLV.binary) {
int length = (256 * data[i + 2]) + data[i + 1];
tlvList.add(Arrays.copyOfRange(data, i + 3, i + 3 + length));
i = i + 3 + length;
}
} // end of loop
return tlvList.toArray(new Object[tlvList.size()]);
}
我得到下面的異常任何幫助進一步調試問題或者甚至如果可能的話解決方案。
哪一行是Server.java的第131行? – craig65535 2013-04-10 19:14:21
請編輯您的代碼以更易於縮進。目前閱讀非常困難。 (順便說一下,爲什麼在構造字符串時複製字節數組?)只需使用重載的String構造函數,它可以指定起始索引。) – 2013-04-10 19:18:31
看起來,當您嘗試複製數組範圍時,「i + 3」或「我+ 3 +長度」超出範圍。爲此添加一個驗證,以考慮計算索引或數組長度的最小值。 – devang 2013-04-10 19:19:28