Java中的序列化和反序列化机制是很重要的,因为在很多情况下,需要将对象存储到磁盘或者网络中,并且在需要的时候将其还原。Java中的序列化机制可以将一个对象转换成一个字节序列,这个字节序列可以被存储到磁盘或者网络中,而反序列化机制可以将这个字节序列重新转换成一个对象。
// 序列化代码 public class SerializeDemo { public static void main(String[] args) { try { // 创建一个对象输出流 FileOutputStream fileOut = new FileOutputStream("employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); // 创建一个Employee对象 Employee e = new Employee(); e.name = "Alex Smith"; e.address = "123 Main Street"; e.SSN = 111223333; e.number = 101; // 将对象序列化 out.writeObject(e); // 关闭流 out.close(); fileOut.close(); System.out.println("Serialized data is saved in employee.ser"); } catch (IOException i) { i.printStackTrace(); } } }
上面的代码演示了如何将一个Employee对象序列化并且将其存储到磁盘中。
// 反序列化代码 public class DeserializeDemo { public static void main(String[] args) { Employee e = null; try { // 创建一个对象输入流 FileInputStream fileIn = new FileInputStream("employee.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); // 从流中读取对象 e = (Employee) in.readObject(); // 关闭流 in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { c.printStackTrace(); return; } // 打印对象的内容 System.out.println("Deserialized Employee..."); System.out.println("Name: " + e.name); System.out.println("Address: " + e.address); System.out.println("SSN: " + e.SSN); System.out.println("Number: " + e.number); } }
上面的代码演示了如何从磁盘中读取一个Employee对象并且将其反序列化成一个Java对象。
需要注意的是,Java中的序列化和反序列化机制需要保证序列化和反序列化的版本号一致,否则可能会出现不兼容的情况。