持久化和序列化
- 持久化
持久化就是瞬间状态机制转换为持久状态。
持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、xml数据文件等等。
持久化是一种对象服务,就是把内存中的对象保存到外存中,方便以后取回。 - 序列化
序列化将对象的状态信息转换为可以存储和传输的形式。
序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。
java序列化与反序列化
- java序列化是指把java对象转换为字节序列的过程。
ctx =JAXBContext.newInstance(Student.class);
//Marshaller 类负责管理将 Java 内容树序列化回 XML 数据的过程
ctx.createMarshaller().marshal(student, new File("student.xml"));
java反序列化是指把java字节序列恢复到对象的过程。
//Unmarshaller 类管理将 XML 数据反序列化为新创建的 Java 内容树的过程,并可在解组时有选择地验证 XML 数据
Object obj =ctx.createUnmarshaller().unmarshal(new File("student.xml"));
System.out.println(obj);
Serializable接口是启用其序列化功能的接口。
xml
- xml是一种标记语言,可扩展的标记语言。
xml标签没有被预定义,需要自己自行定义标签。
xml的宗旨是传输数据,而不是展示数据。
xml设计具有自我描述性。
xml是独立于硬件和软件的信息传输工具。
- XPath路径表达式
节点名称(nodename) 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
**@ ** 选取属性
JAXB注解
- 1.@XmlRootElement 将一个Java类映射为一段XML的根节点参数:
**name ** 定义这个根节点的名称
namespace 定义这个根节点命名空间
2.@XmlAccessorType 定义映射这个类中的何种类型需要映射到XML。可接收四个参数,分别是:
XmlAccessType.FIELD:映射这个类中的所有字段到XML
XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到xml
XMLXmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
XmlAccessType.NONE:不映射
3.@XmlElement 指定一个字段或get/set方法映射到XML的节点。
参数:
defaultValue 指定节点默认值
name 指定节点名称
namespace 指定节点命名空间
required 是否必须(默认为false)
nillable 该字段是否包含 nillable="true" 属性(默认为false)
type 定义该字段或属性的关联类型
4.@XmlAttribute 指定一个字段或get/set方法映射到XML的属性。
参数:
name 指定属性名称
namespace 指定属性命名空间
required 是否必须(默认为false)
5.@XmlTransient 定义某一字段或属性不需要被映射为XML。
6.@XmlType 定义映射的一些相关规则参数:
propOrder 指定映射XML时的节点顺序
factoryClass 指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身
factoryMethod 指定工厂类的工厂方法
name 定义XML Schema中type的名称
namespace 指定Schema中的命名空间
7.@XmlElementWrapper 为数组元素或集合元素定义一个父节点。
8.@XmlJavaTypeAdapter 自定义某一字段或属性映射到XML的适配器。
9..@XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中。