Добрый день. У меня немного специфичное API, которое отдает массив байт, который нужно разобрать как массив данных или как строку. Если я принимаю массив с большим размером, к примеру 6000, то с 3000 идут одни нули в следующих позициях массива. Через debug самое странное, все хорошо, если точку остановки поставить выше условия if - все хорошо. А если точку остановки поставить уже ниже, то вот с 3000 идут одни нули в следующих позициях массива. Помогите пожалуйста разобраться что не так.
private String receive() throws NullPointerException, IOException {
int lengthHeader = 19;
byte[] answerHeader = new byte[lengthHeader];
in.read(answerHeader);
byte[] bytesLength = Arrays.copyOfRange(answerHeader, 15, lengthHeader);
int lengthBody = bitConverterToInt32(bytesLength);
byte[] answer = new byte[lengthBody];
in.read(answer);
if (answer[0] == 0) {// строка
return new String(Arrays.copyOfRange(answer, 5, answer.length), Charset.forName(CHARSET_UTF16LE));
} else {//массив
StringBuilder builder = new StringBuilder();
byte[] lengthCommand = Arrays.copyOfRange(answer, 1, 2);
byte[] bytesRows = Arrays.copyOfRange(answer, 5, 6);
int maxRows = bytesRows[0];
int currentPos = lengthCommand[0] + 5 + 4;
for (int i = 0; i < maxRows; i++) {
byte[] bytes = Arrays.copyOfRange(answer, currentPos, currentPos + 4);
int rowLength = bitConverterToInt32(bytes);
currentPos += 4;
String splitter = i == 0 ? "" : "|";
builder.append(splitter);
byte[] bytes1 = Arrays.copyOfRange(answer, currentPos, currentPos + rowLength);
String s = new String(bytes1, Charset.forName(CHARSET_UTF16LE));
builder.append(splitter);
builder.append(s);
currentPos += rowLength;
}
return builder.toString();
}
}