序列化与字节码转换
Posted
技术标签:
【中文标题】序列化与字节码转换【英文标题】:Serialization vs. Byte Code Translation 【发布时间】:2013-08-04 06:04:08 【问题描述】:我是一个编程初学者,我只是想知道序列化过程和字节码(中间语言)之间的转换过程是否有区别。
我在 javacodegeeks.com 上找到了这个:
序列化通常在需要发送数据时使用 通过网络或存储在文件中。我所说的数据是指对象而不是文本。 现在的问题是您的网络基础设施和您的硬盘 理解位和字节但不理解 Java 的硬件组件 对象。序列化是您的 Java 对象的翻译 将值/状态转换为字节以通过网络发送或保存。 --> 开启 另一方面,反序列化是将字节码转换为 对应的java对象。
根据我对本段的理解,序列化可能是 java 将其程序转换为字节码以便能够传输到不同的计算机环境并仍然正常运行的过程。
我这样想对吗?
【问题讨论】:
【参考方案1】:根据我对本段的理解,序列化可能是 java 将其程序转换为字节码以便能够传输到不同的计算机环境并仍然正常运行的过程。我这样想对吗?
不,使用 javac 编译会创建在 JVM 上运行的字节码。 VM(例如 JVM)解释字节码并使用一些聪明而复杂的即时编译(取决于机器/平台)为您提供最终产品。看到字节码只是 JVM 解释的一堆instructions。每个字节码操作码都是一个字节长,因此得名字节码。
另一方面,序列化将 Java 对象的状态转换为字节流。这些字节不是字节码之类的指令。 Java 序列化的主要目的是将对象写入流中,以便它可以通过网络传输,并且可以再次重建该对象。当涉及到两个不同的参与方时,您需要一个协议来再次重建完全相同的对象。 Java 序列化 API 只是为您提供了这一点。您可以利用序列化功能的其他方法是,您可以使用它来执行深层复制。
现在的问题是您的网络基础设施和硬盘是理解位和字节但不理解 Java 对象的硬件组件。序列化是将 Java 对象的值/状态转换为字节以通过网络发送或保存。 --> 另一方面,反序列化是将字节码转换为相应的java对象。
看到你不能只是将一个 java 对象传递给网络的链接层并期望它能够发送。网络通过物理介质发送比特和字节。因此,可序列化让您可以以标准方式将对象编码为二进制,通过网络传递,然后在接收端将其解码回对象,并以对象在发送端的确切状态
【讨论】:
对此进行扩展,字节码是执行java程序as shown here过程中的一个步骤。序列化是许多编程语言在某些情况下使用的过程(它可能有不同的名称),正如 sunrize 解释的那样,将对象转换为字节以进行存储/传输。序列化的一种常见用途是文件写入。以上是关于序列化与字节码转换的主要内容,如果未能解决你的问题,请参考以下文章