Код должен быть для чтения / записи символов с помощью Readers и Writers. Например, если он находится в середине последовательности UTF-8 или получает вторую половину символа UCS-2, и ему случается прочитать эквивалентное значение байта амперсанда, то он повредит данные, которые он пытается копировать. Код обычно живет дольше, чем вы ожидаете, и кто-то может попытаться поднять его позже и использовать в ситуации, когда это действительно может иметь значение.
Насколько быстрее или медленнее, использование BufferedReader, вероятно, поможет больше всего. Если вы пишете в файловую систему, BufferedWriter не будет иметь большого значения, потому что операционная система буферизует записи для вас, и это делает хорошую работу. Если вы пишете в StringWriter, то буферизация не будет иметь значения (может даже замедлить ее), но в противном случае буферизация ваших записей должна помочь.
Вы можете переписать его для обработки массивов; и это может сделать это быстрее. Вы все еще можете сделать это с массивами. Вам придется написать более сложный код для обработки граничных условий. Это также должно быть фактором при принятии решения.
Измеряйте, не угадывайте и остерегайтесь мнений людей, которые не проинформированы о всех деталях. В конечном счете, вам решать, достаточно ли это быстро для этой ситуации. Единого ответа нет, потому что все ситуации разные.