序列化与字节码转换

时间:2013-08-02 20:46:51

标签: java xml json serialization bytecode

我是编程的初学者,我只是想知道序列化过程与转换为字节代码(中间语言)的过程之间是否存在差异。

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

  

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

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

我认为这是正确的吗?

1 个答案:

答案 0 :(得分:6)

  

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

不,使用javac进行编译会创建在JVM上运行的字节代码。 VM(例如JVM)对字节码进行INTERPRET并使用一些巧妙而复杂的即时编译(依赖于IS机器/平台)来为您提供最终产品。请参阅字节码只是JVM解释的一堆instructions。每个字节码操作码的长度为一个字节,因此称为字节码。

另一方面,

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

  

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

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