0

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

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

起初我试图终止 socked 以指示 EOS,但随后无法再传输任何答案。

在这个stackoverflow question中提出了一个类似的问题。似乎存在多种解决方案:

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

那么你能告诉我如何尽可能简单和优雅地建立这个吗?

4

2 回答 2

2

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

诚然,这不会检测到流中何时有额外信息,但我预计在大多数情况下这不会成为问题。

于 2013-06-03T15:14:14.973 回答
-1

使用 HTTP 来实现传输层,它是一个标准,在它的 1.1 版本中它支持 KeepAlive 做你描述的事情。

于 2013-06-03T14:39:08.520 回答