当前位置: 首页 > news >正文

wordpress 电影下载站济南最新消息

wordpress 电影下载站,济南最新消息,德勤管理咨询,百度一下百度一下dom4j和jaxb这篇文章研究了使用多种不同方法将XML文档编组为Java对象的性能。 XML文档非常简单。 它包含一个Person实体的集合。 ?xml version1.0 encodingUTF-8 standaloneyes? personspersonidperson… dom4j和jaxb 这篇文章研究了使用多种不同方法将XML文档编组为Java对象的性能。 XML文档非常简单。 它包含一个Person实体的集合。 ?xml version1.0 encodingUTF-8 standaloneyes? personspersonidperson0/idnamename0/name/personpersonidperson1/idnamename1/name/person ... XML中的Person实体有一个对应的Person Java对象 .. XmlAccessorType(XmlAccessType.FIELD) XmlType(name , propOrder {id,name }) public class Person {private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id id;}public String getName() {return name;}public void setName(String value) {this.name value;} } 和一个PersonList对象代表一个Persons集合。 XmlAccessorType(XmlAccessType.FIELD) XmlRootElement(name persons) public class PersonList {XmlElement(nameperson)private Listperson personList new ArrayListperson();public Listperson getPersons() {return personList;}public void setPersons(Listperson persons) {this.personList persons;} } 研究的方法是 各种口味的JAXB 萨克斯 DOM 在所有情况下目标都是使XML文档中的实体到达相应的Java对象。 在Person和PersonList POJOS上的JAXB批注用于JAXB测试中。 可以在SAX和DOM测试中使用相同的类注释将被忽略。 最初是参考 使用了JAXBSAX和DOM的实现。 然后使用Woodstox STAX解析。 在某些JAXB解组测试中会调用此方法。 测试是在运行Windows 7的戴尔笔记本电脑2.1 GHz奔腾双核CPU上进行的。 测试1 –使用JAXB解组Java文件。 Test public void testUnMarshallUsingJAXB() throws Exception {JAXBContext jc JAXBContext.newInstance(PersonList.class);Unmarshaller unmarshaller jc.createUnmarshaller();PersonList obj (PersonList)unmarshaller.unmarshal(new File(filename)); } 测试1说明了JAXB的编程模型有多简单。 从XML文件到Java对象非常容易。 无需参与编组和解析的精妙细节。 测试2 –使用JAXB解组流源 测试2与测试1类似不同之处在于这次流源对象包装在文件对象周围。 Streamsource对象向JAXB实现提供提示以流式传输文件。 Test public void testUnMarshallUsingJAXBStreamSource() throws Exception {JAXBContext jc JAXBContext.newInstance(PersonList.class);Unmarshaller unmarshaller jc.createUnmarshaller();StreamSource source new StreamSource(new File(filename));PersonList obj (PersonList)unmarshaller.unmarshal(source); } 测试3 –使用JAXB解组StAX XMLStreamReader 再次类似于测试1不同之处在于这次XMLStreamReader实例包装了FileReader实例该实例由JAXB编组。 Test public void testUnMarshallingWithStAX() throws Exception {FileReader fr new FileReader(filename);JAXBContext jc JAXBContext.newInstance(PersonList.class);Unmarshaller unmarshaller jc.createUnmarshaller();XMLInputFactory xmlif XMLInputFactory.newInstance();XMLStreamReader xmler xmlif.createXMLStreamReader(fr);PersonList obj (PersonList)unmarshaller.unmarshal(xmler); } 测试4 –仅使用DOM 此测试不使用JAXB而是仅使用JAXP DOM方法。 这意味着比任何JAXB方法都需要更多的代码。 Test public void testParsingWithDom() throws Exception {DocumentBuilderFactory domFactory DocumentBuilderFactory.newInstance();DocumentBuilder builder domFactory.newDocumentBuilder();Document doc builder.parse(filename);List personsAsList new ArrayList();NodeList persons doc.getElementsByTagName(persons);for (int i 0; i persons.getLength(); i) {Element person (Element)persons.item(i);NodeList children (NodeList)person.getChildNodes();Person newperson new Person();for (int j 0; j children.getLength(); j){Node child children.item(i);if (child.getNodeName().equalsIgnoreCase(id)) {newperson.setId(child.getNodeValue());} else if (child.getNodeName().equalsIgnoreCase(name)) {newperson.setName(child.getNodeValue());}}personsAsList.add(newperson);} } 测试5 –仅使用SAX测试5不使用JAXB而使用SAX来解析XML文档。 SAX方法比任何JAXB方法涉及更多的代码和更多的复杂性。 开发人员必须参与文档的解析。 Test public void testParsingWithSAX() throws Exception {SAXParserFactory factory SAXParserFactory.newInstance();SAXParser saxParser factory.newSAXParser();final Listperson persons new ArrayListperson();DefaultHandler handler new DefaultHandler() {boolean bpersonId false;boolean bpersonName false;public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {if (qName.equalsIgnoreCase(id)) {bpersonId true;Person person new Person();persons.add(person);} else if (qName.equalsIgnoreCase(name)) {bpersonName true;}}public void endElement(String uri, String localName, String qName) throws SAXException {}public void characters(char ch[], int start, int length) throws SAXException {if (bpersonId) {String personID new String(ch, start, length);bpersonId false;Person person persons.get(persons.size() - 1);person.setId(personID);} else if (bpersonName) {String name new String(ch, start, length);bpersonName false;Person person persons.get(persons.size() - 1);person.setName(name);}}};saxParser.parse(filename, handler); } 该测试针对3个包含Person实体集合的文件运行了5次。 第一个文件包含100个Person实体大小为5K。 第二个包含10,000个实体大小为500K第三个包含250,000个Person实体大小为15 Meg。 在任何情况下都不会使用任何XSD或进行任何验证。 结果在结果表中给出其中不同运行的时间用逗号分隔。 检测结果 首先使用32位JDK 1.6.26运行测试并使用JDK附带的SAXDOM和JAXB的参考实现。 解组类型 100人次毫秒 10K人次毫秒 25万人次毫秒 JAXB默认 48,135,4,4 785247,50,50 1522、1457、1353、1308、1317 JAXB流源 1163,3,2 444448,45,43 1191、1364、1144、1142、1136 JAXBStAX 182,1,1,1 111、136、89、91、92 2693、3058、2495、2472、2481 DOM 1622,2,2 89,5055,53,50 1992、2198、1845、1776、1773 萨克斯 421,1,1 293423,26,26 704、669、605、589,591 JDK 1.6.26测试注释 通常第一次进行编组的时间最长。 JAXB和SAX的内存使用情况相似。 10,000个人的档案约为2 Meg而250,000的档案为36 – 38 Meg。 DOM内存使用率更高。 对于10,000个人档案它是6 Meg对于250,000个人档案它是大于130 Meg。 纯SAX的性能更好。 特别是对于非常大的文件。 使用相同的JDK1.6.26再次运行完全相同的测试但这一次使用了StAX解析的Woodstox实现。 解组类型 100人次毫秒 10K人次毫秒 25万人次毫秒 JAXB默认 168,3,5,8,3 294、43、46、43、42 2055、1354、1328、1319、1319 JAXB流源 113,3,3,4 43,42,47,44,42 1147、1149、1176、1173、1159 JAXBStAX 30,0,1,1,0 67,37,40,37,37 1301、1236、1223、1336、1297 DOM 103,1,1,1,2 136,52,49,49,50 1882、1883、1821、1835、1822 萨克斯 422,1,1 31,25,25,38,25 613、609、607、595、613 JDK 1.6.26 Woodstox测试注释 同样第一次进行编组通常会成比例地变长。 同样SAX和JAXB的内存使用情况非常相似。 两者都好得多 比DOM。 结果与测试1非常相似。 JAXBStAX的进场时间已大大缩短。 这是由于 正在使用StAX解析的Woodstox实现。 纯SAX的性能时间仍然是最好的。 尤其 用于大文件。 再次运行完全相同的测试但是这次我使用了JDK 1.7.02和StAX解析的Woodstox实现。 解组类型 100人次毫秒 10,000人次毫秒 250,000人次毫秒 JAXB默认 165,533,5 611,23244628 578、539、511、511、519 JAXB流源 13,4,3,4,3 43,24212622 678、520、509、504、627 JAXBStAX 21,1,000 300,69201616 637、487、422、435、458 DOM 22,2,2,2,2 420,25242324 1304、807、867、747、1189 萨克斯 7,2,2,1,1 169,15151914 366、364、363、360、358 JDK 7 Woodstox测试注释 总体而言JDK 7的性能要好得多。 有一些异常-第一次解析100个人和10,000个人档案。 内存使用量略高。 对于SAX和JAXB10,000人档案为2 – 4 Meg对于250,000人档案为45 – 49 Meg。 对于DOM它再次更高。 10,000人的档案5 – 7.5 Meg250,000人的档案136 – 143 Meg。 注意WRT所有测试 没有对100人的文件进行内存分析。 内存使用量太小因此将没有意义的信息。 首次初始化JAXB上下文最多需要0.5秒。 这不包括在测试结果中因为这只是第一次。 之后JVM会非常快地初始化上下文始终小于5毫秒。 如果您在使用任何JAXB实现时都注意到此行为请考虑在启动时进行初始化。 这些测试是一个非常简单的XML文件。 实际上将会有更多的对象类型和更复杂的XML。 但是这些测试仍应提供指导。 结论 纯SAX的性能时间略好于JAXB但仅适用于非常大的文件。 除非您使用非常大的文件否则性能差异不值得担心。 JAXB的编程模型优势克服了SAX编程模型的复杂性。 别忘了JAXB也像DOM一样提供随机访问。 SAX不提供此功能。 如果使用JAXB / StAX则使用Woodstox的性能时间看起来要好得多。 使用64位JDK 7的性能看起来要好得多。 内存使用情况看起来略高。 参考 JAXB 合作伙伴 Alex Staveley在都柏林技术博客上的 JAXBSAXDOM性能 。 相关文章 使用JAXB从XSD生成XML 将对象映射到多个XML模式–天气示例 使用Spring MVC开发Restful Web服务 带有简单框架教程的Android XML绑定 使用XML Pull增强Android XML解析 翻译自: https://www.javacodegeeks.com/2011/12/jaxb-sax-dom-performance.htmldom4j和jaxb
http://www.pierceye.com/news/470670/

相关文章:

  • 怎样做企业的网站公司部门解散
  • 三亚中国检科院生物安全中心门户网站建设什么是响应式网站
  • 为什么要建设公司网站怎么制作图片视频和配音乐
  • 建设项目环境影响登记表备案系统网站论坛门户网站开发
  • 铁岭网站建设建设云企业服务平台
  • 响应式网站制作方法泰安明航网络科技有限公司
  • 建设网站需要几级安全等保深圳网站开发招聘
  • 无锡网站建设制作公司甘肃省建设工程网站
  • 广州微信网站建设哪家好公司网站排名优化手段
  • 深圳市路桥建设集团有限公司招标采购网站crntos wordpress
  • 广告网站制作报价深圳建筑设计平台网站
  • 网站ns记录南宁企业建站模板
  • 网站服务建设目前做哪些网站能致富
  • 专业网站定制公司深圳网页制作服务
  • 白云网站(建设信科网络)网页工具在哪里
  • 食品网站策划网站建设送企业邮箱吗
  • 天津自贸区建设局网站手机网站导航设计
  • 企业网站建设制作大连网站建设吗
  • 做网页兼职网站有哪些建设网站需要花费
  • 如何快速写一个网站黄页网络的推广软件下载
  • 网站建设公司注册enfold wordpress
  • 上海网站建设百度推广公司哪家好模具厂咋做网站
  • 网站背景自动切换织梦网站模板使用教程
  • 网站建设的成果怎么写找人做淘宝网站需要多少钱
  • 网站制作 企业网站建设哪家好tiktok海外运营推广
  • 南昌做网站哪个公司好玉溪市住房和城乡建设局网站
  • 男女做暖网站是什么样子的wordpress 时间轴 主题
  • 国外建设网站jsp网站开发工具
  • 网站流量怎么赚钱wordpress 08影院模板
  • win网站建设网站哪个公司做的好