Java序列化是将对象转化为字节序列的过程,可通过网络传输或存储到本地。Java反序列化是在接收字节流并将其转化为对象的过程。这个过程给Java提供了一个简单的机制来实现网络分布式计算。
public class Person implements Serializable { private String name; private int age; private String email; public Person(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } public String getName() { return name; } public int getAge() { return age; } public String getEmail() { return email; } }
在上述代码中,我们定义了一个实现了Serializable接口的Person类,这意味着我们可以序列化和反序列化该类的实例。接下来,我们将通过以下代码将一个新的Person对象序列化保存到文件中。
try { FileOutputStream fileOut = new FileOutputStream("person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(new Person("Alice", 25, "alice@example.com")); out.close(); fileOut.close(); } catch(IOException i) { i.printStackTrace(); }
现在,我们将反序列化该文件,并将其输出到控制台。
try { FileInputStream fileIn = new FileInputStream("person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); Person person = (Person) in.readObject(); in.close(); fileIn.close(); System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); System.out.println("Email: " + person.getEmail()); } catch(IOException i) { i.printStackTrace(); } catch(ClassNotFoundException c) { System.out.println("Person class not found"); c.printStackTrace(); }
序列化和反序列化是Java中实现持久化存储和远程通信的重要机制。需要特别注意的是,Java序列化可以潜在地产生安全漏洞,所以我们应该根据实际情况选择更安全的替代方案,如JSON或XML。