java - 使用java中的可变对象将XML数据写入OutputStream

标签 java network-programming xml-serialization jaxb xstream

将 XML 写入 OutputStream(TCP 套接字)而不生成/创建太多不可变对象(immutable对象)的最佳方法是什么?

所以我的数据存储在 ConcurrentHashMap 中。我想循环此数据,创建自定义 XML,然后将该 XML 写入 OutputStream。这个过程会是重复的,所以我不想在转换/写入过程中生成太多的对象,这样GC就不会有太大的负担。

我一直在研究 JAXB 和 XStream,以使 Map 到 XML 的转换更容易,但似乎使用 JAXB 中的 XMLAdapter 和 XStream 中的 Converter 方法,我最终会得到在转换过程中创建的对象。

我也愿意自己动手​​。我想要一个最终重用可变对象的解决方案。

我可以使用 StringBuffer 并使用附加方法连接所有内容(XML 标签和我的数据),然后执行 mystringBuffer.toString().getBytes() 并将字节数组写入输出流。在这种方法中,我可以重用 StringBuffer 和 ByteBuffer。只有 bytearray 每次都会是一个新对象。

还有其他方法吗?

看来我有点超前了,假设内存/GC 可能有问题 - 我可能完全错误,仅仅使用 JAXB 或 XStream 可能是解决方案。然后我可以做一些性能测试来找出瓶颈。

谢谢

最佳答案

同意斯卡夫曼的评论:

I don't think you're giving the garbage collector enough credit - it's extremely good at handling a large number of short-lived objects. Don't worry about object creation overhead until you can see an actual problem with the performance. This question sounds like a classic case of premature optimisation.

所以,是的,我还会做一些性能测试,看看是否存在您需要关注的瓶颈。

(发布此答案主要是为了让这个问题获得更多关注/有竞争力的答案,或者至少是为了将其从不断增长的未回答问题列表中删除。)

关于java - 使用java中的可变对象将XML数据写入OutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783485/

相关文章:

java - 是否可以调用 super 接口(interface)的默认方法?

java - Selector.close() 是否关闭所有客户端套接字?

c - C代码中MAC地址的表示

c# - 如何序列化到日期时间

c# - 如何使用 DataContractSerializer 创建带有与我已知类型匹配的标签名称的 xml

java - 如何将电子邮件另存为文本

java - Junit多线程

c - Unsigned int 用 UDP 发送后显示为随机负整数

c# - 可序列化字典,如何设置键名?

java - Optional.orElse(null) 用 org.jetbrains.annotations.NotNull 标记