快速业务通道

彻底转变流,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
OM tree using a specified * character encoding to the target OutputStream. * * @author Copyright (c) 2002 Merlin Hughes <merlin@merlin.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. */ public class DOMSerializerEngine implements OutputEngine {   private NodeIterator iterator;   private String encoding;   private OutputStreamWriter writer;

构造器获取要在上面进行循环的 DOM 节点,或预先构造的节点迭代器(这是 DOM 2 的一部分),以及一个用于序列化格式的编码。

清单 26. 构造器

public DOMSerializerEngine (Node root) {    this (root, "UTF-8");   }   public DOMSerializerEngine (Node root, String encoding) {    this (getIterator (root), encoding);   }   private static NodeIterator getIterator (Node node) {    DocumentTraversal dt= (DocumentTraversal)     (node.getNodeType () ==      Node.DOCUMENT_NODE) ? node : node.getOwnerDocument ();    return dt.createNodeIterator (node, NodeFilter.SHOW_ALL, null, false);   }   public DOMSerializerEngine (NodeIterator iterator, String encoding) {    this.iterator = iterator;    this.encoding = encoding;   }

初始化期间,该引擎将适当的 OutputStreamWriter 连接至目标输出流。

清单 27. initialize() 方法

public void initialize (OutputStream out) throws IOException {    if (writer != null) {     throw new IOException ("Already initialised");    } else {     writer = new OutputStreamWriter (out, encoding);    }   }

彻底转变流,第1部分(14)

时间:2011-06-21 Merlin Hughes

在执行阶段,该引擎从节点迭代器中获得下一个节点,然后将其序列化至 OutputStreamWriter 。当获取了所有节点后,引擎关闭它的流。

清单 28. execute() 方法

public void execute () throws IOException {    if (writer == null) {     throw new IOException ("Not yet initialised");    } else {     Node node = iterator.nextNode ();     closeElements (node);     if (node == null) {      writer.close ();     } else {      writeNode (node);      writer.flush ();     }    }   }

当该引擎关闭时,没有要释放的资源。

清单 29. 关闭

public void finish () throws IOException {   }   // private void closeElements (Node node) throws IOException ...   // private void writeNode (Node node) throws IOException ... }

序列化每个节点的其它内部细节不太有趣;这一过程主要涉及根据节点的类 型和 XML 1.0 规范写出节点,所以我将在本文中省略这一部分的代码。请参阅 附带的 源代码,获取完整的详细信息。

结束语

我所提供的是一个有用的框架,它利用标准输入流 API 让您能有效读取由只 能写入输出流的系统产生的数据。它让我们读取经压缩或编码的数据及序列化文 档等。虽然可以使用标准 Java API 实现这一功能,但使用这些类的效率根本不 行。应该充分注意到,这种解决方案比最简单的蛮力解决方案更有效(即使在数 据不大的情况下)。将数据写入 ByteArrayOutputStream 以便进行后续处理的 任何应用程序都可能从这一框架中

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号