对于什么是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常见问题及解决方法,请继续通过本站来进行了解吧。
推荐阅读: