根据我对本段的理解,序列化可能是 java 将其程序转换为字节码以便能够传输到不同的计算机环境并仍然正常运行的过程。我这样想对吗?
不,使用 javac 编译会创建在 JVM 上运行的字节码。VM(例如 JVM)解释字节码并使用一些聪明而复杂的即时编译(取决于机器/平台)为您提供最终产品。看到字节码只是JVM 解释的一堆指令。每个字节码操作码的长度为一个字节,因此得名字节码。
另一方面,序列化将 Java 对象的状态转换为字节流。这些字节不是字节码之类的指令。Java 序列化的主要目的是将对象写入流中,以便它可以通过网络传输,并且可以再次重建该对象。当涉及到两个不同的参与方时,您需要一个协议来再次重建完全相同的对象。Java 序列化 API 只是为您提供了这一点。您可以利用序列化功能的其他方法是,您可以使用它来执行深层复制。
现在的问题是您的网络基础设施和硬盘是理解位和字节但不理解 Java 对象的硬件组件。序列化是将 Java 对象的值/状态转换为字节以通过网络发送或保存。--> 另一方面,反序列化是将字节码转换为相应的java对象。
看到你不能只是将一个 java 对象传递给网络的链接层并期望它能够发送。网络通过物理介质发送比特和字节。因此可序列化允许您以标准方式将对象编码为二进制,将其通过网络传递,然后在接收端将其解码回对象,并以对象在发送端所处的确切状态