Я получаю исключение «array out of bounds», когда запускаю следующий код. В основном я отправляю две закодированные строки TLV от клиента к серверу, и сервер декодирует TLV-кодированные значения и печатает их на экране.ArrayOutOfBoundsException при расшифровке сообщения
кода печатать декодирует значение
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];
код в классе TLV для декодирования
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()]);
}
Я получаю следующее исключение при запуске программы:
an error has occurred
java.lang.ArrayIndexOutOfBoundsException: 1
at ServerConnection.run(Server.java: 131)
At java.lang.Thread.run(Unknown Source)
Я был бы признателен любая помощь отлаживает проблему дальше или даже решение, если это возможно.
Какая строка строки 131 Server.java? – craig65535
Пожалуйста, отредактируйте свой код, чтобы сделать его более читабельным. На данный момент ужасно трудно читать. (Почему вы копируете байт-массивы при построении строк, кстати? Просто используйте перегруженный конструктор String, который позволяет вам указать начальный индекс.) –
Кажется, когда вы пытаетесь скопировать диапазон массивов, 'i + 3' или 'i + 3 + length' выходит за пределы диапазона. Добавьте подтверждение для этого, чтобы рассмотреть минимальный вычисленный индекс или длину массива. – devang