gpt4 book ai didi

java - 如何使用 XML 协议(protocol)检测网络流中的 "EOF"?

转载 作者:行者123 更新时间:2023-12-01 14:30:22 27 4
gpt4 key购买 nike

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

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

一开始我尝试终止socked来指示EOS,但随后就无法再传输任何答案。

在此stackoverflow question有人提出了类似的问题。似乎存在多种解决方案:

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

那么你能给我一个提示,让我如何尽可能简单和优雅地建立这个吗?

最佳答案

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

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

关于java - 如何使用 XML 协议(protocol)检测网络流中的 "EOF"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16899016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com