Я пытаюсь найти эффективный способ сопоставления с шаблоном для ByteArrayOutputStream, размер которого превышает максимальный размер строки .
Выполнение сопоставления с шаблоном для ByteArrayOutputStream, который подходит для одногоСтрока тривиальна:
private boolean doesStreamContainPattern(Pattern pattern, ByteArrayOutputStream baos) throws IOException {
/*
* Append external source String to output stream...
*/
if (pattern != null) {
String out = new String(baos.toByteArray(), "UTF-8");
if (pattern.matcher(out).matches()) {
return true;
}
}
/*
* Some other processing if no pattern match
*/
return false;
}
Но если размер baos
превышает максимальный размер строки, проблема превращается в:
- Подача
baos
в несколько строк. - «Скользящий» шаблон сопоставления по конкатенации этих нескольких строк (то есть оригинальное содержание
baos
).
Шаг 2 выглядит более сложным, чем Шаг 1, но я знаю, что такие утилиты, какUnix sed делает именно это с файлом.
Как правильно это сделать?