1、什麼是序列化?
序列化指的是將實例化的對象轉化爲字節流,反序列化指的是將字節流還原爲原先的對象。有點像《三體》裏邊生命脫水後變成一張圖片,然後又能還原成活生生的生命。
2、爲什麼要序列化?
(1)、序列化後,對象的信息轉化爲字符流,便於網絡間對象的傳輸。
(2)、可以實現對象的持久化。
3、怎麼序列化?
public class Person implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
transient private String name;
private int age = -1;
private String sex;
private static Integer height = 180;
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append("name:" + name);
sb.append("age:" + age);
sb.append("sex:" + sex);
sb.append("height:" + height);
return sb.toString();
}
public static void main(String[] args) throws Exception
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\\\\person1.obj"));
oos.writeObject(new Person("小明", 15, "男", 170));
oos.close();
ObjectInputStream ors = new ObjectInputStream(new FileInputStream("F:\\\\person1.obj"));
Person person1 = (Person) ors.readObject();
System.out.println(person1.toString());
}
public static Integer getHeight()
{
return height;
}
public static void setHeight(Integer height)
{
Person.height = height;
}
public Person(String name, int age, String sex, Integer height)
{
this.name = name;
this.age = age;
this.sex = sex;
this.height = height;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
}
(1)、類的對象要想序列化,這個類必須繼承Serializable(還有其他幾種方式,先暫時不提)。
Serializable是一個空的接口,源碼裏邊沒有聲明任何方法。
(2)、序列化代碼:
public static void main(String[] args) throws Exception
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\\\\person1.obj"));
oos.writeObject(new Person("小明", 15, "男", 170));
oos.close();
ObjectInputStream ors = new ObjectInputStream(new FileInputStream("F:\\\\person1.obj"));
Person person1 = (Person) ors.readObject();
System.out.println(person1.toString());// name:nullage:15sex:男height:170
}
(3)、transient修飾的成員變量不會被序列化和反序列化。
(4)、看網上的資料說static修飾的屬性是類的屬性,被對象共享,因此也不會被序列化;但是實際測試,
發現height:170,說明被序列化了,此處還有待繼續研究。。