4

我是一个编程初学者,我只是想知道序列化过程和字节码(中间语言)之间的转换过程是否有区别。

我在 javacodegeeks.com 上找到了这个:

当需要通过网络发送数据或存储在文件中时,通常使用序列化。我所说的数据是指对象而不是文本。现在的问题是您的网络基础设施和硬盘是理解位和字节但不理解 Java 对象的硬件组件。序列化是将 Java 对象的值/状态转换为字节以通过网络发送或保存。-->另一方面,反序列化是将字节码转换为相应的java对象。<--

根据我对本段的理解,序列化可能是 java 将其程序转换为字节码以便能够传输到不同的计算机环境并仍然正常运行的过程。

我这样想对吗?

4

1 回答 1

10

根据我对本段的理解,序列化可能是 java 将其程序转换为字节码以便能够传输到不同的计算机环境并仍然正常运行的过程。我这样想对吗?

不,使用 javac 编译会创建在 JVM 上运行的字节码。VM(例如 JVM)解释字节码并使用一些聪明而复杂的即时编译(取决于机器/平台)为您提供最终产品。看到字节码只是JVM 解释的一堆指令。每个字节码操作码的长度为一个字节,因此得名字节码。

另一方面,序列化将 Java 对象的状态转换为字节流。这些字节不是字节码之类的指令。Java 序列化的主要目的是将对象写入流中,以便它可以通过网络传输,并且可以再次重建该对象。当涉及到两个不同的参与方时,您需要一个协议来再次重建完全相同的对象。Java 序列化 API 只是为您提供了这一点。您可以利用序列化功能的其他方法是,您可以使用它来执行深层复制。

现在的问题是您的网络基础设施和硬盘是理解位和字节但不理解 Java 对象的硬件组件。序列化是将 Java 对象的值/状态转换为字节以通过网络发送或保存。--> 另一方面,反序列化是将字节码转换为相应的java对象。

看到你不能只是将一个 java 对象传递给网络的链接层并期望它能够发送。网络通过物理介质发送比特和字节。因此可序列化允许您以标准方式将对象编码为二进制,将其通过网络传递,然后在接收端将其解码回对象,并以对象在发送端所处的确切状态

于 2013-08-02T21:02:24.513 回答