四种写入方式性能对比

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

public class Demo {
    /**
     * DOM方式生成xml文档
     */
    public void DOMCreateXML() {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.newDocument();
            doc.setXmlStandalone(true);
            Element bookstore = doc.createElement("bookStore");
            Element book = doc.createElement("book");
            Element name = doc.createElement("name");
            name.setTextContent("冰与火之歌");
            book.appendChild(name);
            book.setAttribute("id", "1");
            bookstore.appendChild(book);
            doc.appendChild(bookstore);
            TransformerFactory tff = TransformerFactory.newInstance();
            Transformer tf = tff.newTransformer();
            tf.setOutputProperty(OutputKeys.INDENT, "yes");
            tf.transform(new DOMSource(doc), new StreamResult(new File("books1.xml")));
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }
    /**
     * SAX方式生成xml文档
     */
    public void SAXCreateXML() {
        SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
        TransformerHandler handler;
        try {
            handler = tff.newTransformerHandler();
            Transformer tr = handler.getTransformer();
            tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            tr.setOutputProperty(OutputKeys.INDENT, "yes");
            File file = new File("books2.xml");
            if(!file.exists()){
                file.createNewFile();
            }
            Result result = new StreamResult(new FileOutputStream(file));
            handler.setResult(result);
            handler.startDocument();
            AttributesImpl attr = new AttributesImpl();
            handler.startElement("", "", "bookStore", attr);
            attr.clear();
            attr.addAttribute("", "", "id", "", "1");
            handler.startElement("", "", "book", attr);
            attr.clear();
            handler.startElement("", "", "name", attr);
            handler.characters("冰与火之歌".toCharArray(), 0, "冰与火之歌".length());
            handler.endElement("", "", "name");
            handler.endElement("", "", "book");
            handler.endElement("", "", "bookStore");
            handler.endDocument();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
    }
    /**
     * JDOM方式生成xml文档
     */
    public void JDOMCreateXML() {
        org.jdom2.Element bookstore = new org.jdom2.Element("bookStore");
        org.jdom2.Document doc = new org.jdom2.Document(bookstore);
        org.jdom2.Element book = new org.jdom2.Element("book");
        book.setAttribute("id","1");
        org.jdom2.Element name = new org.jdom2.Element("name");
        name.setText("冰与火之歌");
        book.addContent(name);
        bookstore.addContent(book);
        Format format = Format.getCompactFormat();
        format.setIndent("");
        format.setEncoding("UTF-8");
        XMLOutputter outputter = new XMLOutputter(format);
        try {
            outputter.output(doc, new FileOutputStream(new File("books3.xml")));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * DOM4J方式生成xml文档
     */
    public void DOM4JCreateXML() {
        org.dom4j.Document document = DocumentHelper.createDocument();
        org.dom4j.Element bookstore = document.addElement("bookStore");
        org.dom4j.Element book = bookstore.addElement("book");
        book.addAttribute("id", "1");
        org.dom4j.Element name = book.addElement("name");
        name.setText("冰与火之歌");
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        File file = new File("books4.xml");
        XMLWriter writer;
        try {
            writer = new XMLWriter(new FileOutputStream(file), format);
            writer.setEscapeText(false);
            writer.write(document);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void testPerformance() throws Exception {
        System.out.println("性能测试:");
        // 测试DOM性能
        long start =System.currentTimeMillis();
        DOMCreateXML();
        System.out.println("DOM:"+(System.currentTimeMillis()-start));
        // 测试SAX性能
        start =System.currentTimeMillis();
        SAXCreateXML();
        System.out.println("SAX:"+(System.currentTimeMillis()-start));
        // 测试JDOM性能
        start =System.currentTimeMillis();
        JDOMCreateXML();
        System.out.println("JDOM:"+(System.currentTimeMillis()-start));
        // 测试DOM4J性能
        start =System.currentTimeMillis();
        DOM4JCreateXML();
        System.out.println("DOM4J:"+(System.currentTimeMillis()-start));
    }
}

时间: 2024-10-08 02:57:37

四种写入方式性能对比的相关文章

XML的四种写入方式

DOM方式生成XML: <?xml version="1.0" encoding="UTF-8"?><bookStore> <book id="1"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> </b

[转][Android]Android数据的四种存储方式

android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuilder public class SQLiteQueryBuilderextends Object This is a convience class that helps build SQL queries to be sent to SQLiteDatabase objects. 构造方法摘要

Android开发之基本控件和详解四种布局方式

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

Nginx 四种分配方式——session处理

最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查. 如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.因此,这时候的负载均衡就会大显身手了,它会自动剔除挂掉的服务器. 下面简单的介绍下我使用Nginx做负载的体会 下载---安装Ngi

RxJS的另外四种实现方式(序)

本文适合人群:了解Rx编程人士.Javascript发烧友 本文涉及概念:响应型编程.NodeJs.函数式编程 背景 本人自从读过一篇来自Info的<函数式反应型编程(FRP) -- 实时互动应用开发的新思路>后便迷恋上了Rx,甚至以当时的Rxjs库移植了一套适用于Flash的AS3.0的Rx库ReactiveFl,也在实际开发中不断实践体会其中的乐趣.最近在知乎上无意中看到有人提到了一个名为callbag的项目,引发了我很大的兴趣,甚至FQ观看了作者的视频Callback Heaven -

RxJS的另外四种实现方式(二)——代码最小的库(续)

接上篇 RxJS的另外四种实现方式(一)--代码最小的库 上篇我们展示了生产者interval和操作符filter的实现,接下来我们看一下消费者subscriber的实现 callbag的实现 const subscribe = (listener = {}) => source => { if (typeof listener === "function") { listener = { next: listener }; } let { next, error, com

Eclipse SVN 冲突的 介绍 及 四种解决方式

转自https://blog.csdn.net/diyu122222/article/details/79879376 1.为什么会出现冲突<1>两个开发人员,Harry和Sally,分别从服务器端下载了文件A. <2>Harry修改之后,A变成了A',Sally修改之后,A变成了A". <3>Harry先一步提交,使服务器端文件的版本也变成了A' <4>Sally本地的文件A"已经过时了,此时她已无法提交文件,服务器会要求她先进行一次更

同步、异步、阻塞、非阻塞四种调用方式

在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端:  同步(Sync) 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作. 根据这个定义,Java中所有方法都是同步调用,应为必须要等到结果后才会继续执行.我们在说同步.异步的时候,一般而言是特指那些需要其他端协作或者需要一定时间完成的任务. 简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事.

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中. 解:MATLAB指令: theta=0:0.1:6*pi;rho=cos(theta/3)+1/9; >> polar(theta,rho) >> >> plot(theta,rho) >> semilogx(theta,rho) >> grid >> hist(rho,15) 结果分别如下图: 图1 图2 图3 图4