Java-套接字:如何在多个应用程序之间发送和序列化对象

Java-Sockets: How to send and serialize object between multiple applications

我有 2 个 Maven 应用程序应该通过服务器套接字和套接字进行通信。如果可能的话,我想将数据作为 Java 对象发送,但为此我需要这两个项目都包含对象的 class。

如果可能的话,我不想用 class 创建第三个 Maven 项目并将其作为依赖项添加到服务器和客户端项目中。还有其他方法吗?

感谢您的回答!

您可以使您的服务器项目成为您的客户端项目的子项目,这意味着您的服务器可以访问客户端需要的所有 classes,外加一些额外的内容。

或者,您可以创建一个包含共享 classes 的 JAR,然后使用 mvn install(此处的文档:https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html)

对于实际的数据传输,您可以使用 Serializable 接口序列化您的对象,但是这种方法存在很多问题:

  • 从易碎到 class 的变化 - 如果您更改 class,旧对象可能会损坏,除非您手动管理它
  • Java-only - 例如,如果您决定做类似的事情,您将无法用 C++ 编写客户端,在 Java 中编写服务器。
  • 框架不兼容 - 许多流行的框架主要与其他格式一起工作,不能保证兼容性。

相反,您可以使用:

  • JSONs - 使用 Jackson Databind 或 Google Gson 库,它们灵活、强大且标准化
  • XML - 类似于 JSONs,但有一些细微差别
  • Google Protobuf - 也有一些限制,但对于资源受限的环境来说被低估了。
  • 自定义字符串格式 - 实现您自己的 toDataString()fromDataString() 方法。这仅适用于小型 classes,因为 Unicode、转义字符、编码等存在许多问题,大多数库都对您隐藏。这比其他方法更危险。

一般来说,我会推荐 JSON,除非您有充分的理由不这样做。我个人使用Jackson,这里有一个link的教程:http://tutorials.jenkov.com/java-json/jackson-objectmapper.html