Вы звоните strToAdd.getBytes()
без указания кодировки символов в вызове System.arraycopy
, который будет использовать системную кодировку по умолчанию, которая вполне может не соответствовать ISO-8859-1. Вы должны быть последовательны в том, какую кодировку вы используете. Честно говоря, я бы также предложил вам использовать UTF-8, а не ISO-8859-1, если у вас есть выбор, но это другой вопрос.
Почему вы так или иначе имеете дело с байтовыми массивами? Почему бы просто не использовать строки?
Также обратите внимание, что ваш метод addStringToArrayBytePlusSeparator
не дает никаких указаний на то, сколько байт было скопировано, что означает, что вызывающая сторона не будет иметь никакого представления о том, что делать с ним впоследствии. Если вы должны использовать такие байтовые массивы, я бы предложил addStringToArrayBytePlusSeparator
вернуть либо новый "конец логического массива", либо количество скопированных байтов. Например:
private static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
/**
* (Insert fuller description here.)
* Returns the number of bytes written to the array
*/
private static int addStringToArrayBytePlusSeparator(byte[] arrDest,
String strToAdd,
int destPosition)
{
byte[] encodedText = ISO_8859_1.getBytes(strToAdd);
// TODO: Verify that there's enough space in the array
System.arraycopy(encodedText, 0, arrDest, destPosition, encodedText.length);
return encodedText.length;
}