Я вижу, что у вас уже есть работающее решение, основанное на комментариях Кевина, но может быть полезно понять, почему ваш старый код был медленным.
Проблема в том, что когда вы объединяете строки напрямую с помощью оператора +
или с помощью метода concat()
, он фактически создает новую строку с результатом объединения. Это включает в себя копирование всего содержимого обеих строк, которые вы объединяете. Поэтому, когда вы читаете файл и создаете строку содержимого, каждый раз, когда вы добавляете к нему, вы создаете еще одну копию всего, что у вас есть в содержимом.
Решение, которое, как я предполагаю, заключается в том, что вы делаете сейчас, заключается в использовании класса StringBuffer, который представляет собой динамический буфер, который позволяет вам изменять его содержимое (т.е. добавлять новые данные в конец), без всегда приходится выделять новый объект String и копировать в него все.
Главное, что вы должны иметь в виду, это то, что строки в java неизменны. Каждый раз, когда вы вызываете метод для строки Java, который каким-либо образом его изменяет, он фактически создает новую копию строки с результатом изменения.