对象序列化 && JSON

本文探讨了Java对象的序列化与反序列化,详细介绍了Serializable接口、transient关键字、自定义序列化机制以及Externalizable接口。还讨论了单例模式在序列化中的处理。在JSON序列化部分,提到了JSON-lib、Gson、Jackson和FastJson等库的使用,并阐述了它们在微服务和远程调用中的应用场景。
摘要由CSDN通过智能技术生成

java对象持久化或者远程调用都需要将对象序列化后保存或传递,还原就需要反序列化。

对象序列化与反序列化

对象序列化时,会将对象的状态按字节保存,反序列化再解开字节封装为对象。只序列化对象的状态,因此,对象序列化不关注静态变量。

Serializable

java为对象序列化提供了一套标准的API机制。

  • 类要实现序列化,必须实现java.io.Serializable接口,该接口仅为标记作用,只有标记了该接口,才可以被序列化。

  • 实现接口Serializable,默认序列化机制,会序列化当前对象及引用的其他所有关联对象。

  • serialVersionUID序列化与反序列化版本需要一致,未显示声明该版本号,则序列化时默认生成。

public class SerializationTest implements Serializable {

    private String name;

    private String address;

    public static void main(String[] args) throws Exception {
        SerializationTest t1 = new SerializationTest();
        t1.name = "zhang";
        t1.address = "shanghai";
        System.out.println(t1.name + "->" + t1.address);

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d://a.txt"));
        oos.writeObject(t1);
        oos.close();

        t1.address = "beijing";
        System.out.println(t1.name + "->" + t1.address);

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d://a.txt"));
        SerializationTest t2 = (SerializationTest) ois.readObject();
        ois.close();

        System.out.println(t1.name + "->" + t1.address);
        System.out.println(t2.name + "->" + t2.address);
    }
}

zhang->shanghai
zhang->beijing
zhang->beijing
zhang->shanghai

ObjectOutputStream)

ObjectOutputStream内部对String、Enum、Array等默认可处理,其他对象需要实现Serializable接口

    private void writeObject0(Object obj, boolean unshared)
        thr
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值