Как мне на самом деле реализовать следующее? Мне придется обрабатывать байтовый массив, который будет содержать текст в несколько строк. Средний размер данных, вероятно, составит около 10 килобайт данных.
После неопределенного количества строк будет строка, начинающаяся со специального токена («FIRSTSTRING»). Позже где-то в этом же файле будет другая строка, также начинающаяся со специального токена («SECONDSTRING»). Если в байтовом массиве определены как первая, так и вторая строки, вторая строка должна быть скопирована вместо первой строки. После этого должен быть возвращен результирующий байтовый массив.
Ниже моя первая попытка. Я еще не реорганизовал его, чтобы уменьшить сложность. Я беспокоюсь о надежности, а также очень много о производительности. Кажется, есть слишком много способов обойти это, и мне не хватает опыта, необходимого для суждения. Я был бы очень признателен за хороший вклад по этому вопросу.
private byte[] handleHeader(final byte[] input) throws IOException {
// input
ByteArrayInputStream bais = new ByteArrayInputStream(input);
InputStreamReader isr = new InputStreamReader(bais);
BufferedReader brs = new BufferedReader (isr);
// output
ByteArrayOutputStream data = new ByteArrayOutputStream();
ByteArrayOutputStream after = new ByteArrayOutputStream();
String line=null;
String original=null;
String changeWith=null;
while ((line = brs.readLine())!=null) {
line+="\n";
if (line.startsWith("FIRSTSTRING")) {
original = line;
continue;
}
if (line.startsWith("SECONDSTRING")) {
changeWith = line;
continue;
}
if ("".equals(original)) {
data.write(line.getBytes());
} else {
after.write(line.getBytes());
}
}
if (changeWith!=null && original != null) {
changeWith+="\n";
data.write(changeWith.getBytes());
} else if (original != null){
data.write(original.getBytes());
}
after.writeTo(data);
return data.toByteArray();
}