我想为列表优化ObjectMapper。要求是我需要在列表的每个元素后面添加一个分隔符。我当前的代码如下所示:
StringBuilder strBuilder = new StringBuilder();
for (Event event : segregatedList) {
String eventJson = mapper.writeValueAsString(event);
strBuilder.append("\n");
strBuilder.append(eventJson);
}这对于一个很长的列表(大约10000个事件)来说需要大量的时间,.How我可以优化代码来在一次go中序列化列表吗?
发布于 2018-11-02 15:13:36
映射器实例是线程安全的,因此您可以将mapper.writeValueAsString拆分为并行作业。我想,如果您不担心它们的附加顺序,这样的东西可能会有所帮助!
segregatedList.parallelStream().map(event -> mapper.writeValueAsString(event)).collect(Collectors.joining("\n")))否则,我可以在这里看到非常小的改进范围。也许您可以通过忽略Dark Knight中提到的属性来优化json
发布于 2018-11-02 15:04:08
在java中,有多种方法可以连接字符串。
java.lang.String
的concat()方法
根据我个人的分析,我可以说字符串上的+调用被转换成了新的StringBuilder().append( "" )。由于StringBuilder(字符串)构造函数分配了一个包含16个字符的缓冲区,因此追加超过16个字符将需要重新分配缓冲区。最后,StringBuffer.toString()调用使用StringBuilder缓冲区的副本创建一个新的String对象。
所以,如果你不想要同步开销,我建议你在这里使用StringBuffer,StringBuilder是最好的。我看到您已经在使用StringBuilder了,所以这里几乎没有改进的余地。但是,您可以通过忽略无用的属性来优化生成的json。
https://stackoverflow.com/questions/53113801
复制相似问题