Поток читает / записывает байты.Попытка заменить текст в двоичном представлении вызывает проблемы.Поэтому первое, что нужно сделать, - это обернуть этот поток в Reader (например, InputStreamReader), который позаботится о преобразовании двоичных данных в символьную информацию для вас.Вам нужно знать кодировку ваших потоковых данных, чтобы убедиться, что они интерпретируются правильно.Например, UTF-8 или ISO-8859-1.
Когда у вас есть текстовые данные, вы можете подумать о том, как их заменить.Один из способов сделать это - использовать регулярные выражения.Однако это означает, что вам сначала нужно прочитать весь поток в строку, выполнить подстановку, а затем вернуть байтовый массив.Для больших объемов данных это может быть неэффективно.
Поскольку вы имеете дело с данными XML, вы могли бы использовать более высокий уровень подхода и каким-то образом анализировать XML, что позволяет обрабатывать содержимоебез необходимости хранить их полностью в промежуточном формате.SAXParser с вашим собственным ContentHandler сделает свое дело.Когда наступают события, просто запишите их снова, но с соответствующими изменениями.Другим подходом было бы преобразование XSLT с некоторой магией функции расширения.
Разве не предполагалось, что в java.nio будет какая-то поддержка потоковых манипуляций, подобных этой?Или это было запланировано для следующей версии Java?