【问题标题】:Sending several datatypes to remote server向远程服务器发送多种数据类型
【发布时间】:2010-01-19 11:32:29
【问题描述】:

我正在用 Java 编写客户端和服务器,客户端发送请求以创建证书。此请求包含许多不同的数据类型,包括字节 [],我现在这样做的方式是使用 ObjectStreams,例如:

objectStream.writeObject( new String("value of field1"));
objectStream.flush();
objectStream.writeObject( new String("value of field"));
objectStream.flush();
objectStream.writeObject( publicKey);
objectStream.flush();
...

现在我知道这是一个非常糟糕的设计,但我不太确定如何改进它。

XML 会是个好主意吗?

谢谢,

【问题讨论】:

    标签: java xml sockets


    【解决方案1】:

    您有多种选择:

    • 通过实现接口使您的对象可串行化,并确保所有字段也是可串行化的(字节[] 是)。然后你可以打电话给objectStream.writeObject(myObj);
    • XML 不是一个坏主意。如果另一端始终是 Java,您可以使用 XMLEncoderXMLDecoder 与 XML 进行转换并通过网络发送。一个更重的选择是使用JAXB - 在开始之前阅读一下它,因为它的用法更复杂(但你也可以使用其他语言)

    【讨论】:

      【解决方案2】:

      现在我知道这很糟糕 设计

      你为什么这么认为? Java 序列化易于使用且有效。 Don't complicate things needlessly.

      您是否知道您将不得不适应非 Java 参与者,或者在无法更新现有客户端的情况下发展协议?这些将是担心协议的原因。否则,做最简单的事情。将所有字段放在一个类中,将其设为Serializable,它甚至比您现在所做的更简单。确保将与此相关的所有逻辑保存在一个地方,并且当您需要更便携的协议时,序列化为 XML 或 JSON 而不是ObjectOutputStream 不会太难。

      【讨论】:

        【解决方案3】:

        如果整个应用程序都是用 Java 构建的并且不必包含其他平台,您是否考虑过使用 RMI?

        您仍然需要处理序列化,但是您可以更本机地实现您的应用程序,而不必费心处理编组/解组或低级序列化等事情。

        【讨论】:

          【解决方案4】:

          使用 Java 序列化将服务器和客户端都与 Java 联系起来,并且也使升级成为问题(是的,有很多方法可以解决它,但它是问题的常见来源)。 XML 相当冗长,虽然适用于少量数据,但不能很好地扩展。

          我建议使用JSONFUDGE 之类的东西,它们可以让您以非常简洁的编码发送名称值对。

          【讨论】:

          • 绝对正确的是,通过序列化,客户端和服务器都将绑定到 java,但这不是问题,因为它们都必须使用在 java 中编程的 ssl 库,所以两者都绑定到 java从项目开始。但是在阅读了 Json 和 fudge 之后,我肯定会在我的下一个项目中使用其中一个,所以 +1 来回答你;)
          猜你喜欢
          • 2014-01-21
          • 1970-01-01
          • 2011-06-30
          • 2017-01-01
          • 2018-01-31
          • 2012-05-04
          • 1970-01-01
          • 2022-07-22
          • 1970-01-01
          相关资源
          最近更新 更多