Java 对象序列化与反序列化:原理、实现及代码示例
在 Java 中,序列化是指将一个对象转换成字节流的过程,以便可以将其保存在文件中或通过网络进行传输。反序列化则是将字节流重新转换回对象的过程。\n\n要实现对象的序列化和反序列化,首先需要让对象所属的类实现 java.io.Serializable 接口。该接口没有任何方法,只是一个标记接口,用来表示该类可以被序列化。\n\n下面是一个 Java 代码示例,演示了如何实现对象的序列化和反序列化:\n\njava\nimport java.io.*;\n\n// 实现Serializable接口表示该类可以被序列化\nclass Person implements Serializable {\n private static final long serialVersionUID = 1L;\n private String name;\n private int age;\n\n public Person(String name, int age) {\n this.name = name;\n this.age = age;\n }\n\n public String toString() {\n return "Person [name=" + name + ", age=" + age + "]";\n }\n}\n\npublic class SerializationDemo {\n public static void main(String[] args) {\n Person person = new Person("John", 25);\n\n // 将对象序列化到文件\n try {\n FileOutputStream fileOut = new FileOutputStream("person.ser");\n ObjectOutputStream out = new ObjectOutputStream(fileOut);\n out.writeObject(person);\n out.close();\n fileOut.close();\n System.out.println("对象已被序列化并保存在person.ser文件中。");\n } catch (IOException e) {\n e.printStackTrace();\n }\n\n // 从文件中反序列化对象\n try {\n FileInputStream fileIn = new FileInputStream("person.ser");\n ObjectInputStream in = new ObjectInputStream(fileIn);\n Person deserializedPerson = (Person) in.readObject();\n in.close();\n fileIn.close();\n System.out.println("从person.ser文件中反序列化得到的对象为:" + deserializedPerson);\n } catch (IOException e) {\n e.printStackTrace();\n } catch (ClassNotFoundException e) {\n e.printStackTrace();\n }\n }\n}\n\n\n在上述代码中,Person 类实现了 Serializable 接口。我们首先创建一个 Person 对象,并将其序列化到名为 person.ser 的文件中。然后从该文件中读取字节流,并通过类型转换将其转换回 Person 对象,最后输出反序列化得到的对象。\n\n需要注意的是,当一个类被序列化后,如果对该类的定义进行了修改,那么在反序列化时可能会出现版本不一致的问题。为了解决这个问题,可以在序列化类中添加一个名为 serialVersionUID 的静态常量。当类的定义发生变化时,可以手动更新 serialVersionUID 的值,以确保版本一致。
原文地址: https://www.cveoy.top/t/topic/px10 著作权归作者所有。请勿转载和采集!