Java 序列化
什么是序列化
对象转化为字节流
为什么序列化
- 永久保存对象,将对象的字节序列保存到本地文件中。
- 通过序列化对象,在网络中传递对象
- 序列化对象,在进程间传递对象
序列化方法1:实现Serializable接口(隐式序列化)
实现Serializable接口,这种是隐式序列化,会自动序列化所有非static和transient关键字修饰的成员变量。
public class A implements Serializable{
private String name;
private int age;
public A(String name,int age){
this .name=name;
this.age=age;
}
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;
}
@Override
public String toString() {
return "A [name=" + name + ", age=" + age + "]";
}
}
//
public class SerializableDemo{
public static void main(String [] args){
Sytem.out.printlen("原来的对象");
A a= new A("jiao",20);
System.out.println("a");
//创建序列化输出流
ByteArrayOutputStream buf= new ByteArrayOutputStream();
ObjectOutputStream out= new ObjectOutputStream(buf);
//将序列化对象存入缓冲区
out.writeObject(a);
//将对象从缓冲区取出
ObjectInputStream in = new ObjectInputStream(new ByteArrayOutputStream(buf.toByteArray()));
A a1= (A) in.readObject();
System.out.print("输出反序列化后的对象");
System.out,println("a1");
}
}
序列化方式二:实现Externalizable接口。(显式序列化)
Externalizable接口继承自Serializable, 我们在实现该接口时,必须实现writeExternal()和readExternal()方法,而且只能通过手动进行序列化,并且两个方法是自动调用的,因此,这个序列化过程是可控的,可以自己选择哪些部分序列化
序列化方式三:实现Serializable接口+添加writeObject()和readObject()方法。(显+隐序列化)
1、方法必须要被private修饰 (才能被调用)
2、第一行调用默认的defaultRead/WriteObject();(隐式序列化非static和transient)
3、调用read/writeObject()将获得的值赋给相应的值 (显式序列化)