2013-08-02 31 views
3

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

我发现这对javacodegeeks.com:

序列化通常是用来当需要的时候来发送数据 通过网络或存储在文件中。通过数据我的意思是对象而不是文本。 现在的问题是您的网络基础架构和您的硬盘是 硬件组件,它们理解位和字节,但不理解对象的Java 对象。序列化是Java对象的 值/状态转换为通过网络发送或保存的字节。 - >另请参阅 反序列化是将字节码转换为 对应的java对象。 < -

从我这一段的理解,系列化可能是由它的Java程序转换成字节码传输到不同的计算机环境的能力,仍然正常工作的过程。

我正确的想这个吗?

回答

6

从我对本段的理解中,序列化可能是java将程序转换为字节码以便传输到不同计算机环境并仍能正常工作的过程。我是否认为这是正确的?

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

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

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

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

+0

以展开这个字节码是执行java程序的过程中的一步[如这里所示](http://img.viralpatel。净/ 2008/12/Java的程序execution.png)。正如sunrize所解释的,序列化是在某些情况下由许多编程语言(它可能以不同的名称)进行的过程,将对象转换为字节用于存储/传输。序列化的一个常见用途是文件写入。 – scottyseus