XML编程(CRUD:C:create;R:read;U:update;D:delete)

XML的基础语法结束,就该进入XML的编程了,也就是写能够增删改查数据的XML文档

CRUD:C:create;R:read;U:update;D:delete

一、XML解析技术

XML的解析技术,目前的解析方式有两种,dom和sax

dom:(Document Object Model,文档对象模型)是W3C组织推荐的解析XML的一种方式

sax:(Simple API for XML)不是官方标准,但是几乎所有的XML解析器都支持他,XML社区实际上用这个很多。

XML解析开发包 :Jaxp(sun公司),Jdom,dom4j,XStream

JAXP(Java API for XMLProcessing,意为XML处理的Java API)包括DOM接口,SAX接口,StAX接口,XSLT接口

在实际开发过程中,解析工具是没有必要自己写的,已经有很多成熟的解析开发包了。

Dom4j:基于 JAXP 解析方式,性能优异、功能强大、极易使用的优秀框架。

Jdom:本质也是基于 JAXP 但包结构被重新组织, API 大量使用了 Collections 类,在性能上被 dom4j 压了好几个档次。(Jdom和Dom4j以前是一个团队,后来分裂了)

XStream:基于 xmlpull 的 OXMapping 技术,更加倾向于将 XML 解析后映射为 Java 世界中的对象。

二、dom技术解析XML文档的过程:

比如下面XML文档的内容:

<bookstore>
<book category="CHILDREN">
 <title lang="en">Harry Potter</title>
 <author>J K. Rowling</author>
 <year>2005</year>
 <price>29.99</price>
</book>
</bookstore>

首先,里面的所有元素(标签),属性,以及标签内插入的对应文本会被解析到内存中,成为成一个一个的对象;

然后会根据这个XML文档的格式含义,建立起这些对象之间的关系,类似于一棵对象树。

在这里插入图片描述

dom技术的最大缺点,就是对内存的消耗比较大,如果文档太大,就容易导致内存溢出。

dom解析方式的优点是,很容易进行增删改查,只需要找到对象删除就好了。

三、sax技术解析XML文档的过程

另一种方法是sax技术,具体过程是这样的:

将XML文档从上往下读,读取一行就解析一行,因此对内存要求比较小,但是只适合读取,不适合增删改查,注意,因为是读取一行就解析一行,当读到下一个元素的时候,想要更改上一 个元素已经不太可能了。

(dom和sax解析XML文档的区别是一道常见的面试题)

四、调整JVM的大小

既然利用dom方法对数据进行增删改查的时候对内存要求比较大,那么就有对JVM大小调整的需求。(这也是一个常见的面试题)

测试一个数组,首先开辟空间,比如创建一个占用内存1GB的数组

 public static void main(String[] args) {
       byte test[] =new byte[1024*1024*1024];
 }

那么有可能运行起来是会报内存溢出异常的,java虚拟机不会同意这个事情的发生。(尴尬,我的在eclipse里运行成功了,没报异常,用maxMemory输出了一下,好像设置的内存上限很大)

一般默认JVM有默认的内存上限,超过就会抛出异常。

如果想要更改某一个项目运行时的最大虚拟机内存分配,可以右键run as->run configurations->arguments

在这里插入图片描述

在虚拟机参数 VM arguments里输入:

-Xmx80m

也就是配置了最大参数是80MB,这时候上面写的程序运行一下试试:

内存溢出了。

如果想要设置最小的虚拟机内存,使用“-Xms+内存大小”命令。

原文链接:加载失败,请重新获取