首页 > 代码库 > Java序列化
Java序列化
(虽然java序列化没有在实际工作中使用过,但是面试的时候可能会问到,这里还是把一些基本知识总结记录一下。)
实现一个序列化其实只需要实现 Serializable 接口即可。只要这个类实现了Serializable接口,这个的所有属性和方法都会自动序列化。如果类中的某个属性不需要进行序列化,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
代码举例:
实体类:检验一个类的实例是否能序列化十分简单, 只需要查看该类有没有实现 java.io.Serializable接口。
1 public class Employee implements java.io.Serializable 2 { 3 public String name; 4 public String address; 5 public transient int SSN; //不需要实例化的属性 6 public int number; 7 public void mailCheck() 8 { 9 System.out.println("Mailing a check to " + name10 + " " + address);11 }12 }
序列化对象:该程序执行后,就创建了一个名为 employee.ser 文件
1 import java.io.*; 2 3 public class SerializeDemo 4 { 5 public static void main(String [] args) 6 { 7 Employee e = new Employee(); 8 e.name = "Reyan Ali"; 9 e.address = "Phokka Kuan, Ambehta Peer";10 e.SSN = 11122333;11 e.number = 101;12 try13 {14 FileOutputStream fileOut =15 new FileOutputStream("/tmp/employee.ser");16 ObjectOutputStream out = new ObjectOutputStream(fileOut);17 out.writeObject(e);18 out.close();19 fileOut.close();20 System.out.printf("Serialized data is saved in /tmp/employee.ser");21 }catch(IOException i)22 {23 i.printStackTrace();24 }25 }26 }
反序列化:下面的 DeserializeDemo 程序实例了反序列化,/tmp/employee.ser 存储了 Employee 对象
1 import java.io.*; 2 3 public class DeserializeDemo 4 { 5 public static void main(String [] args) 6 { 7 Employee e = null; 8 try 9 {10 FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");11 ObjectInputStream in = new ObjectInputStream(fileIn);12 e = (Employee) in.readObject();13 in.close();14 fileIn.close();15 }catch(IOException i)16 {17 i.printStackTrace();18 return;19 }catch(ClassNotFoundException c)20 {21 System.out.println("Employee class not found");22 c.printStackTrace();23 return;24 }25 System.out.println("Deserialized Employee...");26 System.out.println("Name: " + e.name);27 System.out.println("Address: " + e.address);28 System.out.println("SSN: " + e.SSN);29 System.out.println("Number: " + e.number);30 }31 }
执行结果:
Deserialized Employee...Name: Reyan AliAddress:Phokka Kuan, Ambehta PeerSSN: 0Number:101
当对象被序列化时,属性 SSN 的值为 111222333,但是因为该属性是短暂的,该值没有被发送到输出流。所以反序列化后 Employee 对象的 SSN 属性为 0。
Java序列化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。