快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
部分(5) 时间:2011-06-21 Merlin Hughes

I/O 流引擎

输出引擎解决了让我费力处理的问题,它是一个通过输出流过滤器将数据从 输入流复制到目标输出流的引擎。这满足了递增性的特性,因为它可以一次读写 单个缓冲区。

清单 5 到 10 中的代码实现了这样的一个引擎。通过输入流和输入流工厂来 构造它。清单 11 是一个生成过滤后的输出流的工厂;例如,它会返回包装了目 标输出流的 GZIPOutputStream 。

清单 5. I/O 流引擎

package org.merlin.io; import java.io.*; /** * An output engine that copies data from an InputStream through * a FilterOutputStream 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 IOStreamEngine implements OutputEngine {   private static final int DEFAULT_BUFFER_SIZE = 8192;   private InputStream in;   private OutputStreamFactory factory;   private byte[] buffer;   private OutputStream out;

该类的构造器只初始化各种变量和将用于传输数据的缓冲区。

清单 6. 构造器

public IOStreamEngine (InputStream in, OutputStreamFactory factory) {    this (in, factory, DEFAULT_BUFFER_SIZE);   }   public IOStreamEngine     (InputStream in, OutputStreamFactory factory, int bufferSize) {    this.in = in;    this.factory = factory;    buffer = new byte[bufferSize];   }

在 initialize() 方法中,该引擎调用其工厂来封装与其一起提供的 OutputStream 。该工厂通常将一个过滤器连接至 OutputStream 。

清单 7. initialize() 方法

public void initialize (OutputStream out) throws IOException {    if (this.out != null) {     throw new IOException ("Already initialised");    } else {     this.out = factory.getOutputStream (out);    }   }

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

时间:2011-06-21 Merlin Hughes

在 execute() 方法中,引擎从 InputStream 中读取一个缓冲区的数据,然 后将它们写入已封装的 OutputStream ;或者,如果输入结束,它会关闭 OutputStream 。

清单 8. execute() 方法

public void execute () throws IOException {    if (out == null) {     throw new IOException ("Not yet initialised");    } else {     int amount = in.read (buffer);     if (amount < 0) {      out.close ();     } else {      out.write (buffer, 0, amount);     }    }   }

最后,当关闭引擎时,它就关闭其 InputStream 。

清单 9. 关闭 InputStream

public void finish () throws IOException {    in.close ();   }

内部 OutputStreamFactory 接口(下面清单 10 中所示)描述可以返回过滤 后的 OutputStream 的类。

清单 10. 内部输出流工厂接口

public static interface OutputStreamFactory {    public OutputStream getOutputStream (OutputStream out)     throws IOException;   } }

清单 11 显示将提供的流封装到 GZIPOutputStream 中的一个示例工厂:

清单 11. GZIP 输出流工厂

public class GZIPOutputStreamFactory    implements IOStreamEngine.OutputStreamFactory

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号