Не добавляется необязательный параметр кодировки символов:
new String(bytesArray, "UTF-8")
x.getBytes("UTF-8")
Действительно, если кодировка платформыUTF-8 и bytesArray содержат недопустимые последовательности байтов, у вас проблема.
Ниже приведен хороший заменитель байтов.
private void replaceBytes(ByteArrayInputStream in, ByteArrayOutputStream out, String from, String to) {
try {
byte[] fromBytes = from.getBytes("Cp1252");
byte[] toBytes = to.getBytes("Cp1252");
int fromN = fromBytes.length;
int fromPos = 0; // Matching input, not written to output.
for (;;) {
int b = in.read();
if (b == -1) {
if (fromPos != 0) {
out.write(fromBytes, 0, fromPos);
//fromPos = 0;
}
break;
}
if (b == fromBytes[fromPos]) {
++fromPos;
if (fromPos >= fromN) {
out.write(toBytes);
fromPos = 0;
}
} else {
if (fromPos != 0) {
out.write(fromBytes, 0, fromPos);
fromPos = 0;
}
out.write(b);
}
}
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}