问题:
而不是自己写序列化算法;是否可以只使用内置的 Java 序列化,就像我在下面所做的那样,同时仍然可以跨多种语言工作?
解释:
我想象它的工作方式如下:我启动一个进程,这将是一个特定于语言的程序 - 用该语言编写。例如,我有一个 CppExecutor.exe 文件。我会将数据写入该程序的流中。然后程序会做它需要做的事情,然后返回结果。
为此,我需要以某种方式序列化数据。首先想到的是使用 ObjectInputStream
和 ObjectOutputStream
的基本 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/