使用XStream流式传输未知(可能非常大)数量的Java对象

使用XStream流式传输未知(可能非常大)数量的Java对象,java,xml,stream,xstream,Java,Xml,Stream,Xstream,我试图使用XStream在两个进程(本质上是JVM)之间传输对象。我发现以前在这个论坛上也有人问过类似的问题(请参考下面的链接) 我的要求与上述问题中给出的解决方案之间的基本区别在于,在流操作开始时,所有流对象都不可用。我希望发送过程等待新对象,并在它们出现时将其流式传输。因此,此操作可能需要很长时间(在两个对象的流之间有大量空闲时间) 另一方面,在上面给出的解决方案中,如果我们在一开始就知道所有集合元素,那么效果会很好 请告诉我是否有人以前遇到过这样的要求,并且能够解决它。将问题分为两部分:

我试图使用XStream在两个进程(本质上是JVM)之间传输对象。我发现以前在这个论坛上也有人问过类似的问题(请参考下面的链接)

我的要求与上述问题中给出的解决方案之间的基本区别在于,在流操作开始时,所有流对象都不可用。我希望发送过程等待新对象,并在它们出现时将其流式传输。因此,此操作可能需要很长时间(在两个对象的流之间有大量空闲时间)

另一方面,在上面给出的解决方案中,如果我们在一开始就知道所有集合元素,那么效果会很好


请告诉我是否有人以前遇到过这样的要求,并且能够解决它。

将问题分为两部分:

  • 流程之间的通信/连接
  • 通过连接序列化每个单独的对象
  • 对于第1部分,很难说您是希望保持一个连接处于活动状态,还是希望在有更多数据时打开一个新连接。多次打开一个新连接可能会很昂贵,所以如果您发现这一成本太高,请使用一个连接


    对于第2部分,将对象放在自己的文档中似乎比将它们全部放在一个文档中更简洁。这应该可以通过XStream直接实现。如果您需要类似于发送最外层文档的最终结束标记的“完成”概念,那么在适当的时候发送自定义的“完成”消息。

    谢谢您的回复。这个问题现在已经解决了。我在客户端使用了用于XStream的StAX驱动程序,并确保服务器立即发送XML文档prolog(而不是等待实际事件发生)。如果您仍在使用长时间运行的连接,则只需确保您知道如果网络/连接出现故障且流式数据中断,会发生什么情况。我怀疑斯塔克斯的司机不会高兴的。哦,是的。我正在客户端缓存最后看到的对象id。因此,在网络/连接失败的情况下,它只需重新连接到服务器并发送最后看到的对象id。然后,服务器将通过发送客户端看到的对象之后的剩余对象来响应。