Java序列化在任何语言之间传输数据

标签 java serialization

问题:

而不是自己写序列化算法;是否可以只使用内置的 Java 序列化,就像我在下面所做的那样,同时仍然可以跨多种语言工作?


解释:

我想象它的工作方式如下:我启动一个进程,这将是一个特定于语言的程序 - 用该语言编写。例如,我有一个 CppExecutor.exe 文件。我会将数据写入该程序的流中。然后程序会做它需要做的事情,然后返回结果。

为此,我需要以某种方式序列化数据。首先想到的是使用 ObjectInputStreamObjectOutputStream 的基本 Java Serialization。我读过的大部分内容只说明 Java 序列化是 Java 到 Java 的应用程序。

所有数据都不需要存储在文件中。传输这些数据包的方法是通过 java.lang.Process。 ,我已经设置好了。

数据将由以下内容组成:

  • String - 主要包含向用户显示的信息。
  • Integer - 很可能是 32 位。不需要处理时间。
  • Float - 仅用于处理所有浮点值。
  • 字符 - 确保使用正确的类型。
  • Array - 由此列表中的任何元素组成。

我找到的最佳方法如下:我将从一个 4 字节的魔数(Magic Number)开始 - 只是为了确保我们使用的是正确的数据。接下来,我将有一个整数指定有多少个元素。之后,对于我将拥有的每个元素:一个字节,表示(上述)数据类型,然后是任何关键信息,例如:length for the String数组。然后,后面的数据。


旁注:

我还想指出,将进行大量此类计算,每一毫秒都可能很重要。因此,基于文本的格式(例如 JSON)可能会产生更长的操作时间。考虑到没有任何数据包需要人工解释,因此仅使用字节不是问题。

最佳答案

我推荐谷歌 protobuf :它是二进制的、稳定的、经过验证的,并且具有您提到的所有语言的绑定(bind)。此外,它还可以很好地处理结构化数据。

关于Java序列化在任何语言之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900900/

相关文章:

java - 从 Java 7 更新到 Java 8 时更新 java start.sh 脚本

通过套接字缓存 Java 对象序列化/反序列化

java - OutputStream 与 ByteArrayOutputStream 不写入

c# - 具有 [Serializable] 属性的类

Java 集合实现(例如 HashMaps vs HashSet vs HashTable ...),选择错误的代价是什么?

java - 使用 Java 和 async-http-client 进行基本身份验证获取 URL 内容

Java类加载器效率

java - 如何使用 Hibernate 尽可能快地插入数据

泛型和 Xstream

java - 高效的java对象图序列化