生产-消费模式的XML解析

2016-02-19 14:35 3 1 收藏

下面图老师小编跟大家分享生产-消费模式的XML解析,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - 编程语言 】


  在B2B(企业对企业)应用中XML扮演一个重要的角色。在这些应用中采用Simple API for XML (SAX)或者document.nbspObject Model (DOM)解析器来解析xml文件。(这两个解析器都是Java的api,他们可以在下面的附录中找到)在一个单线程应用中解析是简单明了的。!-- frame contents -- !-- /frame contents --但是,在多线程的应用中这就是很复杂和具有挑战性了,比如说做一个应用服务器,因为应用经常会为解析xml创建一个专门的线程,解析的数据用来为许多同时并发运行的线程服务。这篇文章描述了一个在并发应用中的xml的解析实现。
  
  设计方法
  
  基于并发的生产和消费设计概念,一个专门的线程作为一个生产者去解析xml。一组线程作为消费者,作为解析xml数据的生产线程,他把数据存储在一个共享的数据结构中以供消费线程在将来进行处理时取得,为了最大化产生数据的能力同时最小化内存的使用,这个设计使用了一个非凡的队列来分别为生产者、消费者存储和找到解析的数据.
  
  巧妙的队列(Smart Queuing)
  
  SmartQueue 队列类提供给生产消费线程们队列的功能,他主要的责任是维护队列防止(线程)超载和断流。换句话说,SmartQueue采用维护一个固定长度的队列的方法去保持资源的应用效率。他挂起和唤醒适当的线程在适当的时候,打个比方,假如没有填充数据的空间,队列将挂起生产线程直到一个消费线程从队列里移去一项。
  
  下面的SmartQueue 代码片断展示了这种策略的实现。
  
  public synchronized void put(Object data) {
  // check to see if the length is 2
  while (list.size() = 2) {
  try {
  System.out.println("Waiting to put data");
  wait();
  }
  catch (Exception ex) {
  }
  }
  
  list.add(data);
  notifyAll();
  }
  
  public synchronized Object take() {
  // wait until there is data to get
  // come out if the end of file signaled
  while (list.size() = 0 && (eof != true)) {
  try {
  System.out.println("Waiting to consume data");
  wait();
  } catch (Exception ex) {
  }
  }
  
  Object obj = null;
  
  if (list.size() 0) {
  obj = list.remove(0);
  } else {
  System.out.println("Woke up because end of document.quot;);
  }
  
  notifyAll();
  return obj;
  }
  
  xml 解析
  
  这个设计使用SAX API来解析XML文件是有以下原因的:
  
  这个API读取 XML数据是快速高效的,他不构造任何内部的XML数据描述,相应的,他在碰到XML元素时简单的把数据传递给应用程序。SAX API十分适合生产-消费模式。
  
  !-- frame contents -- !-- /frame contents --  xml 解析控制器(XMLParserHandler) 的类继续自SAX,实现回叫(callback )方法从解析器中接收XML数据,当解析控制器类从解析器中接收XML数据时,他把数据put进hashtable里。在每个文档的结尾,解析控制器把数据put进SmartQueue队列里。这个控制器将进入一个等待状态假如SmartQueue队列里有空间,一旦消费线程从SmartQueue队列中移去一项,put方法将被调用。在完成整个XML文档的解析后,解析控制器(
  

来源:http://www.tulaoshi.com/n/20160219/1607284.html

延伸阅读
标签: PHP
请先安装JAVA的执行环境与PHP结合,具体参考http://www.phpx.com/happy/thr78795.html  或者下载http://www.javax.org/download/php_java.rar  里面我写有个readme.txt说明文档,这个压缩包是个简单的例子。  要下载我的JAVA源码请到http://www.javax.org/download/JavaXml.rar  有其他问题请到http://ww...
标签: Web开发
一、引言   当前Web上流行的脚本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。 XML(eXtensibleMarkup Language)语言是SGML语言的子集,它保留了SGML主要的使用功能,同...
先简单说下前三种方式: DOM方式: 个人理解类似.net的XmlDocument,解析的时候效率不高,占用内存,不适合大XML的解析; SAX方式: 基于事件的解析,当解析到xml的某个部分的时候,会触发特定事件,可以在自定义的解析类中定义当事件触发时要做得事情;个人感觉一种很另类的方式,不知道.Net体系下是否有没有类似的方式? StAX方式: ...
1、为什么需要写一个通用xml解析方法。 当需要解析不同的xml节点。你有可能是在xml解析的时候匹配不同节点并且节点名都是写死的,这样的话你解析不同的节点就需要不同的解析方法。当然这种方式是最简单也是最笨的方法。为了减少代码把代码写得更有质量那么你就需要考虑设计一个通用的xml解析方法。 2、解析思路。 一般情况下,xml的解析结...
标签: 电脑入门
在安全模式启动计算机,有多种用途。那么安全模式到底有哪些用途呢?下面就让我们具体来看一下 1.修复系统故障 如果Windows运行起来不太稳定或者无法正常启动,这时候先不要忙着重装系统,试着重新启动计算机并切换到安全模式启动,之后再重新启动计算机,系统是不是已经恢复正常了?如果是由于注册表有问题而引起的系统故障,此方法非常...

经验教程

927

收藏

91
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部