序列化与反序列化小结

1、实现Serializable接口,全部序列化

2、实现Serializable接口,使用transient可以避免当前被关键字修饰的成员变量失去序列化

3、实现Externalizable接口,在方法中选择需要序列化的成员变量,切记需要一个空的构造函数,不管成员变量是否被关键字transient修饰,只要在方法中确认都可以。

4、Hibernate中的@Transient使用


eg:

package info.kagoy.calculator;

import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        MyClass object1 = null;
        try {
            object1 = new MyClass("Hello", -7, 2.7e10);

            // 写入数据
            System.out.println("object1:" + object1);
            FileOutputStream fos = new FileOutputStream("serial");

            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(object1);

            oos.flush();
            oos.close();
        } catch (Exception e) {
            System.out.println("Exception during serialization:" + e);
            System.exit(0);
        }

        // Object deserialization
        try {
            MyClass object2;

            FileInputStream fis = new FileInputStream("serial");

            ObjectInputStream ois = new ObjectInputStream(fis);
            object2 = (MyClass) ois.readObject();

            ois.close();
            System.out.println("object1=object2" + (object1 == object2));
            System.out.println("object2:" + object2);
        } catch (Exception e) {
            System.out.println("Exception during deserialization:" + e);
            System.exit(0);
        }
    }
}

class MyClass implements Serializable {

    private String s;
    private transient int i;
    private transient double d;

    public MyClass() {
    }

    public MyClass(String s, int i, double d) {
        this.s = s;
        this.i = i;
        this.d = d;
    }

    public String toString() {
        return "s=" + s + ";i=" + i + ";d=" + d;
    }

}

打印的结果为:

object1:s=Hello;i=-7;d=2.7E10
object1=object2false
object2:s=Hello;i=0;d=0.0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值