如何使用XML协议检测网络流中的“EOF”?

时间:2013-06-03 14:23:12

标签: java xml parsing networking

我想设计和实现基于xml的网络协议。我有两个网络机器,每个都运行一个Java应用程序。一个(客户端C)将XML表发送给另一个(服务器S)。 S处理一些数据并将另一张XML表发送回C.

现在我想使用SAX作为XML解析器。要终止SAX的parse()例程,它是必要的,流的末尾是明确定义的。在经典的文件阅读场景中,这是微不足道的。

起初我试图终止袜子以指示EOS,但之后不再传送任何答案。

在此stackoverflow question中,我们会提出类似的问题。似乎存在多种解决方案:

  • 一旦读入请求XML的根元素,就会停止SAX(通过SAXException)。依靠异常来终止算法对我来说很糟糕......我认为这是糟糕的编程风格,不是吗?
  • 我计算要传输到服务器的字节数,并在XML文件之前发送此数字。但是我需要事先创建XML来计算大小。在我眼里也不是最好的练习。

那么你能否给我一个暗示如何尽可能简单和优雅地建立它?

2 个答案:

答案 0 :(得分:2)

如果您只想在到达文档末尾时停止解析,则可以检测到已在文档的根元素上调用endElement()。你需要能够识别根元素当然,但这应该很容易,只需保持一个计数器与当前深度。

不可否认,这将无法检测到流中是否有额外信息,但我不认为在大多数情况下会出现问题。

答案 1 :(得分:-1)

使用HTTP实现传输层,它是一个标准,在它的1.1版本中,它支持KeepAlive执行您描述的操作。