Есть ли что-нибудь (любой способ) объединить 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
буферы (по моему опыту) вредит производительности.