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()将获得的值赋给相应的值 (显式序列化)

posted on 2019-03-03 13:40  jrz  阅读(94)  评论(0编辑  收藏  举报

导航