是否有任何方法可以比StringWriter更快地连接java字符串?

是否有任何方法可以比StringWriter更快地连接java字符串?,java,string,string-concatenation,stringwriter,Java,String,String Concatenation,Stringwriter,我正在提取一组简单的数据,并构建一个大的(1kB-2kB)字符串。我不熟悉这种语言,但阅读后,这似乎是最快的(即最少的复制量): String tmpTable=”“+System.lineSeparator(); StringWriter StringWriter=新StringWriter(1024); 字符串tr=”“; stringWriter.append(tmpTable); 用于(项目p:projectSet){ tr=String.format(trFmt,p.getId(),p

我正在提取一组简单的数据,并构建一个大的(1kB-2kB)字符串。我不熟悉这种语言,但阅读后,这似乎是最快的(即最少的复制量):

String tmpTable=”“+System.lineSeparator();
StringWriter StringWriter=新StringWriter(1024);
字符串tr=”“;
stringWriter.append(tmpTable);
用于(项目p:projectSet){
tr=String.format(trFmt,p.getId(),p.getTitle(),
p、 getPriority(),p.getStatus();
stringWriter.append(tr);
}
stringWriter.append(“+System.lineSeparator());
stringWriter.flush();
stringWriter.close();//旧习惯
有“更好”的方法吗

如果它是“C”,我可能倾向于使用“char*argv[]”类型的交易。

是标准使用。它具有您正在寻找的初始缓冲区大小构造函数和append方法。要从中获取值,请在生成器上调用toString()。没有关闭()或刷新()的方法。

是标准使用方法。它具有您正在寻找的初始缓冲区大小构造函数和append方法。要从中获取值,请在生成器上调用toString()。没有办法(需要)关闭()或刷新()它

有更好的办法吗

是的,我相信有更好的办法

您似乎正在将内存中的HTML构造成一个大的
字符串
。我建议你不要那样做

我认为您应该将数据流传输到客户端(缓冲)
OutputStream
。显然,如果您需要一些格式(或按区域设置从资源包加载
字符串),您可以执行有限的计算(稍后可能会使用缓存优化),但随后恢复流式处理。根据我的经验,添加额外的
String
缓冲区会损害性能

有更好的办法吗

是的,我相信有更好的办法

您似乎正在将内存中的HTML构造成一个大的
字符串
。我建议你不要那样做


我认为您应该将数据流传输到客户端(缓冲)
OutputStream
。显然,如果您需要一些格式(或按区域设置从资源包加载
字符串),您可以执行有限的计算(稍后可能会使用缓存优化),但随后恢复流式处理。添加额外的
字符串
缓冲区(以我的经验)会损害性能。

根据
p.getTitle()
p.getStatus()
返回的内容,代码中可能存在XSS漏洞。在将文本写入HTML之前,请确保转义文本中的任何
<>”&
字符。根据
p.getTitle()
p.getStatus()
返回的内容,代码中可能存在XSS漏洞。请确保转义任何
<>“&
在将文本写入HTML之前先输入文本中的字符。我明白你的意思。如果我对每个HTTP请求都这样做一次,那将是一场灾难。我不清楚我的意图,尽管聪明的人学会了HTML并提供了宝贵的反馈。我正在写入磁盘上的静态页面。这将是我的“缓存”。我只希望“编译”这些页面,不是每个请求一次,而是每小时一次。我明白你的意思。如果我对每个HTTP请求都这样做一次,那将是一场灾难。我不清楚我的意图,尽管聪明的人学会了HTML并提供了宝贵的反馈。我正在写入磁盘上的静态页面。这将是我的“缓存”。我希望只“编译”这些页面,不是每个请求一次,而是每小时一次。
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