java序列化使用场景详解,有哪些使用场景?

KLQ 2020-07-09 15:14:58 java常见问答 5521

对于什么是java序列化相信很多人都清楚了,那么下面要给大家介绍的就是java序列化的使用场景,一起详细的来进行一下了解吧。

使用场景介绍

对象的序列化

目的是把一个具体的对象进行持久化,写入到硬盘上。

这里要注意了,静态数据不可以被序列化,因为,静态数据不在堆内存当中,而是在静态方法区当中。

Serializable

用来启动对象的序列化功能,能够强制让指定类具备序列化功能,这个接口当中没有成员,这是一个标记接口。

这个标记接口用来给序列化类提供UID。

这个uid是依据类当中的成员的数字签名进行运行获取的。

假如,不需要自动获取一个uid,可以在类中,手动指定一个名称为serialVersionUID id号。

根据编译器的不同,或者是对信息的高度敏感性。

最好是每一个序列化的类都进行手动显示的UID的指定。

延伸阅读

介绍完了java序列化的使用场景,下面就顺便的来介绍一下非序列化的使用场景。

非序列化使用场景介绍

怎样把非静态的数据不进行序列化?

这里很简单,使用transient关键字修饰这个关键词就可以了。

使用场景:

为了保证安全,在某些时候,不需要在网络间传输一些数据,例如,身份证号码,密码,银行卡号等等。

延伸阅读:

同一对象序列化多次,会将这个对象序列化多次吗?

答案:不会

将t1、t2、person、t2对象序列化到文件teacher.txt文件中(注意了,反序列化的顺序和序列化时的顺序一致)。

public class WriteTeacher
{
    public static void main(String[] args) throws Exception
    {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("teacher.txt")))
        {
            Person person = new Person("路飞", 20);
            Teacher t1 = new Teacher("雷利", person);
            Teacher t2 = new Teacher("红发香克斯", person);
            //依次将4个对象写入输入流
            oos.writeObject(t1);
            oos.writeObject(t2);
            oos.writeObject(person);
            oos.writeObject(t2);
        }
    }
}

从输出的结果来看,Java序列化同一对象,并不会将此对象序列化多次得到多个对象。

public class ReadTeacher
{
    public static void main(String[] args)
    {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("teacher.txt")))
        {
            Teacher t1 = (Teacher) ois.readObject();
            Teacher t2 = (Teacher) ois.readObject();
            Person p = (Person) ois.readObject();
            Teacher t3 = (Teacher) ois.readObject();
            System.out.println(t1 == t2);
            System.out.println(t1.getPerson() == p);
            System.out.println(t2.getPerson() == p);
            System.out.println(t2 == t3);
            System.out.println(t1.getPerson() == t2.getPerson());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
//输出结果
//false
//true
//true
//true
//true

关于java序列化方面的一些介绍就给你介绍到这里了,更多java常见问题及解决方法,请继续通过本站来进行了解吧。

推荐阅读:

java序列化有什么用?作用详解

java反序列化详解

如何实现java序列化?实现方式