Java序列化与反序列化的知识点(广州中软卓越)

2018-06-12  本文已影响0人  Ony靜

今天广州中软卓越Java培训课程简要讲解一下Java序列化与反序列化的知识点。什么是序列化?反序列化又是什么?为什么要做序列化?带着这些问题,开始我们今天的知识点分析。

一、序列化:

序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

序列化使其他代码可以查看或修改,那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了SerializationFormatter标志的SecurityPermission。在默认策略下,通过Internet下载的代码或Internet代码不会授予该权限;只有本地计算机上的代码才被授予该权限。

通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。

对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。

简单来说:序列化就是把堆内存中的Java对象数据通过某种方式把对象存储到磁盘文件中或者传递给其他网络的节点在网络上传输),我们把这个过程称之为序列化

二、反序列化:

把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象的过程。这便是反序列化。

三、那么为什么要做序列化:

[if !supportLists]1、[endif]在分布式系统中,需要共享的数据的JavaBean对象,都必须得做序列化。此时需要把对象再网络上传输,此时就得把对象数据转换为二进制形式。以后存储在HttpSession中的对象,都应该实现序列化接口(注意:只有实现序列化接口的类,才能做序列化操作)。

[if !supportLists]2、[endif]服务钝化:如果服务发现某些对象好久都没有活动了,此时服务器就会把这些内存中的对象,持久化在本地磁盘文件中(Java对象-->二进制文件)。如果某些对象需要活动的时候,现在内存中去寻找,找到就使用,找不到再去磁盘文件中,反序列化我们得对象数据,恢复成Java对象。

需要做序列化的对象的类,必须实现序列化接口:java.io.Serializable接口(标志接口[没有抽象方法])。

底层会判断,如果当前对象是Serializable的实例,才允许做序列化。    

boolean  ret = Java对象  instanceof Serializable;

在Java中大多数类都已经实现Serializable接口。

去企业,学习企业需要的编程技能!广州中软卓越Java培训,真实企业背景,送你企业入场券!

上一篇下一篇

猜你喜欢

热点阅读