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

Java序列化以在任何语言之间传输数据,java,serialization,Java,Serialization,问题: 而不是编写自己的序列化算法;是否可以像我在下面所做的那样,只使用内置的Java序列化,同时仍然可以跨多种语言工作 说明: 我想象它是如何工作的,如下所示:我启动一个过程,这将是一个特定于语言的程序——用这种语言编写。例如,我有一个CppExecutor.exe文件。我会将数据写入这个程序的流中。然后程序将执行它需要执行的操作,然后返回一个结果 为此,我需要以某种方式序列化数据。首先想到的是使用ObjectInputStream和ObjectOutputStream的基本JavaSeri

问题:

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


说明:

我想象它是如何工作的,如下所示:我启动一个过程,这将是一个特定于语言的程序——用这种语言编写。例如,我有一个CppExecutor.exe文件。我会将数据写入这个程序的流中。然后程序将执行它需要执行的操作,然后返回一个结果

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

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

数据将由以下内容组成:

  • 字符串
    -主要包含向用户显示的信息
  • 整数
    -最有可能是32位。不需要处理时间
  • Float
    -仅用于处理所有浮点值
  • 字符
    -确保使用正确的类型
  • 数组
    -由此列表中的任何元素组成
我计算出如何做到这一点的最佳方法如下:我将从一个4字节的幻数开始——只是为了确保我们使用的是正确的数据。接下来,我将使用一个整数指定有多少个元素。之后,对于每个元素,我都会有:一个字节,表示(上面的)数据类型,后跟任何关键信息,e.x:
length
表示
String
Array
。然后,下面的数据


旁注:


我还想指出,这些计算中有很多都会发生,每一毫秒都可能产生影响。因此,基于文本的格式(如JSON)可能会产生更大的操作时间。考虑到非数据包需要人工解释,只使用字节不会成为问题。

有一种二进制json格式,称为

我还想指出,这些计算中有很多将要进行,因此基于文本的格式(如JSON)可能会产生更大的操作时间


在测量之前不要进行优化。 过早优化是万恶之源


你能试着测试一下吞吐量吗?看看它是否适合您的需要?

有一种二进制json格式,名为

我还想指出,这些计算中有很多将要进行,因此基于文本的格式(如JSON)可能会产生更大的操作时间


在测量之前不要进行优化。 过早优化是万恶之源


你能试着测试一下吞吐量吗?看看它是否适合你的需要?

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

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

Thrift、Protobuf、JSON、MessagePack

安装的复杂性节约>>Protobuf>BSON>MessagePack>JSON

序列化数据大小JSON>MessagePack>Binary Thrift>Compact Thrift>Protobuf


时间成本压缩节约>二进制节约>Protobuf>JSON>MessagePack

节约,Protobuf,JSON,MessagePack

安装的复杂性节约>>Protobuf>BSON>MessagePack>JSON

序列化数据大小JSON>MessagePack>Binary Thrift>Compact Thrift>Protobuf


时间成本压缩节约>二进制节约>Protobuf>JSON>MessagePack

在我看来,有一大堆“浪费”是没有好处的。我是唯一一个最有可能阅读数据包的人,我能很好地解释字节。我还在计划中,所以除非我想为这个程序重写一个非常大的组件,否则我想从一个坚实的基础上开始。所以你的问题是:“在进程之间发送大量数据有多糟糕?”(我无法明确表述)进程间通信相当快。它甚至不必是复制操作。如果接收器未对内存进行修改,则无需复制内存。有虚拟内存的操作系统可以做到这一点。我有一个问题,我无法回答其他问题,因为我不知道什么是“以坚实的基础开始”,“坚实的基础”,什么是“重写”,“解释字节罚款”的意思。“在我看来,有一堆‘浪费’是没有好处的。”这是基于两次观点的,是无法衡量的。如果你能详细讨论这一点,重新设计你的问题,你将有机会得到一个新的答案。举个例子也不错。在哪个用例中,在两个进程之间发送哪些字节?这使你更容易理解你的目标。因为你的问题没有得到足够的重视,所以不要害怕完成它。祝你好运!还要对代码和我们在那里看到的东西进行评论。在我看来,有一堆“浪费”是没有好处的。我是唯一一个最有可能阅读数据包的人,我能很好地解释字节。我还在计划中,所以除非我想为这个程序重写一个非常大的组件,否则我想从一个坚实的基础上开始。所以你的问题是:“在进程之间发送大量数据有多糟糕?”(我无法明确表述)进程间通信相当快。它甚至不必是复制操作