原生序列化:
https://blog.csdn.net/jtf8525140/article/details/81094222
MessagePack
Protocol Buffers
Dubbo kryo
序列化可以系统的通用性、强壮性、优化性能,同时让系统更易于调试和扩展
1.序列化不保存静态变量的状态
2. transient 修饰的参数 不参与序列化
3.父类对象属性进行序列化的时候,要实现Serializable 接口
Peron
public class Person implements Serializable{ private static final long serialVersionUID = -2140242550063332020L; // transient 修饰的参数 不参与序列化 private transient int age; private String name; public static int gender = 1; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
序列化对象
public class SerializeDemo { public static void main(String[] args) { serializePerson(); //序列化不保存静态变量的状态 Person.gender = 2; deSerializePerson(); } private static void serializePerson() { try { ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("person"))); Person person = new Person(); person.setAge(18); person.setName("mic"); oo.writeObject(person); oo.flush(); oo.writeObject(person); oo.flush(); System.out.println("序列化成功"+new File("person").length()); //----------------------- // 重复保存对象的时候,保存的是对象的引用 ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("person"))); Person person1 = (Person) inputStream.readObject(); Person person2 = (Person) inputStream.readObject(); System.out.println(person1==person2); //--------------------------- oo.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private static void deSerializePerson() { try { ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("person"))); Object o = inputStream.readObject(); if (o instanceof Person) { Person person = (Person) o; System.out.println(person.getAge()+","+ person.gender); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
子类对象继承父类对象属性序列化的时候,需要父类也要实现序列化
/** * 父类对象属性进行序列化的时候,要实现Serializable 接口 */ public class SuperPerson implements Serializable{ private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
User
public class User extends SuperPerson implements Serializable{ private static final long serialVersionUID = 1362833492159178974L; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
demo:
public class SuperPersonDemo { public static void main(String[] args) { serializePerson(); //序列化不保存静态变量的状态 Person.gender = 2; deSerializePerson(); } private static void serializePerson() { try { ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File("person"))); User person = new User(); person.setAge(18); person.setName("mic"); oo.writeObject(person); System.out.println("序列化成功"); oo.close(); } catch (IOException e) { e.printStackTrace(); } } private static void deSerializePerson() { try { ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("person"))); Object o = inputStream.readObject(); if (o instanceof User) { User person = (User) o; System.out.println(person.getAge()+","+person.getName()); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }