Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 序列化与字节码转换_Java_Xml_Json_Serialization_Bytecode - Fatal编程技术网

Java 序列化与字节码转换

Java 序列化与字节码转换,java,xml,json,serialization,bytecode,Java,Xml,Json,Serialization,Bytecode,我是一个编程初学者,我只是想知道序列化过程和字节码(中间语言)的转换过程之间是否有区别 我在javacodegeeks.com上找到了这个: 序列化通常在需要发送数据时使用 通过网络或存储在文件中。我所说的数据是指对象,而不是文本。 现在的问题是你的网络基础设施和你的硬盘 理解位和字节但不理解Java的硬件组件 物体。序列化是对Java对象的 值/状态转换为字节,以便通过网络发送或保存。-->在…上 另一方面,反序列化是将字节码转换为 对应的java对象。 根据我对这一段的理解,序列化可能是ja

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

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

序列化通常在需要发送数据时使用 通过网络或存储在文件中。我所说的数据是指对象,而不是文本。 现在的问题是你的网络基础设施和你的硬盘 理解位和字节但不理解Java的硬件组件 物体。序列化是对Java对象的 值/状态转换为字节,以便通过网络发送或保存。-->在…上 另一方面,反序列化是将字节码转换为 对应的java对象。 根据我对这一段的理解,序列化可能是java将其程序转换为字节码的过程,以便能够传输到不同的计算机环境中,并且仍然能够正常工作。我这样想对吗

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

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

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


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

对此进行扩展,字节码是执行java程序过程中的一个步骤。序列化是许多编程语言(可能使用不同的名称)在某些情况下使用的一个过程,正如sunrize所解释的,将对象转换为字节以进行存储/传输。序列化的一个常见用途是文件写入。