Java java.util.regex.Matcher
replaceFirst(...)
/replaceAll(...)
API возвращает строки, которые (при использовании размер кучи по умолчанию) вполне может привести к тому, что OOME будет вводить до 20-50M символов. Эти 2 метода могут быть легко переписаны на write до Writer
вместо того, чтобы создавать укусы, эффективно устраняя одну точку отказа.
Matcher
factory метод, однако принимает только CharSequence
s, который также может выдать OOME, если я использую String
s/StringBuffer
s/StringBuilder
с.
Как мне обернуть java.io.Reader
для реализации интерфейса CharSequence
(учитывая, что мои регулярные выражения могут содержать обратные ссылки)?
Есть ли другое решение, которое может заменять регулярные выражения в файлах и не является OOME-подверженным на больших входах?
Другими словами, как мне реализовать функциональность, аналогичную функции GNU sed
в Java (поскольку sed
, как известно, решает файлы размером до нескольких терабайт, имея ту же поддержку расширенных регулярных выражений)