Есть ли что-нибудь (любой способ) объединить Java-строки быстрее, чем StringWriter?

Я вытягиваю кучу простых данных и строю большую (1 кБ - 2 кБ) строку. Я новичок в этом языке, но после прочтения, это, вероятно, самый быстрый (т.е. наименьшее количество копий):

String tmpTable = "<table border=\"1\">" + System.lineSeparator();
StringWriter stringWriter = new StringWriter(1024);
String tr = "";

stringWriter.append(tmpTable);
for(Project p:projectSet) {
  tr = String.format(trFmt, p.getId(), p.getTitle(),
    p.getPriority(), p.getStatus());
  stringWriter.append(tr);
}
stringWriter.append("</table>" + System.lineSeparator());
stringWriter.flush();
stringWriter.close(); // old habits

Есть ли способ лучше?

Если бы это было 'C', я мог бы склоняться к заключению сделки типа char *argv[].

2 ответа

Решение

StringBuilder является стандартным для использования. Он имеет конструктор начального размера буфера и методы добавления, которые вы ищете. Чтобы получить значение из этого, вызовите toString() в компоновщике. Нет способа (необходимости) закрыть () или очистить ().

Есть ли способ лучше?

Да, я считаю, что есть лучший способ.

Вы, кажется, строите HTML в памяти в большой String, Я предлагаю вам не делать этого.

Я считаю, что вы должны передавать данные клиенту (Buffered) OutputStream, Очевидно, что если вам нужно некоторое форматирование (или загрузить String из пакета ресурсов по локали) вы можете выполнить это ограниченное вычисление (и, возможно, позже оптимизировать его с помощью кэша), но затем возобновить потоковую передачу. Добавление дополнительных String буферы (по моему опыту) вредит производительности.

Другие вопросы по тегам