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
我有 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