快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
f (eof)       return -1;      engine.execute ();     }     if (limit - index < length)      length = limit - index;     System.arraycopy (buffer, index, data, offset, length);     index += length;     return length;    }   }   public long skip (long amount) throws IOException {    if (closed) {     throw new IOException ("Stream closed");    } else if (amount <= 0) {     return 0;    } else {     while (index >= limit) {      if (eof)       return 0;      engine.execute ();     }     if (limit - index < amount)      amount = limit - index;     index += (int) amount;     return amount;    }   }   public int available () throws IOException {    if (closed) {     throw new IOException ("Stream closed");    } else {     return limit - index;    }   }

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

时间:2011-06-21 Merlin Hughes

当操作数据的应用程序关闭该流时,它调用输出引擎的 finish() 方法,以 便可以释放其正在使用的任何资源。

清单 15. 释放资源

public void close () throws IOException {    if (!closed) {     closed = true;     engine.finish ();    }   }

当输出引擎将数据写入其输出流时,调用 writeImpl() 方法。它将这些数据 复制到读缓冲区,并更新读限制索引;这将使新数据可自动地用于读方法。

在单次循环中,如果输出引擎写入的数据比缓冲区中可以保存的数据多,则 缓冲区的容量会翻倍。然而,这不能频繁发生;缓冲区应该快速扩展到足够的大 小,以便进行状态稳定的操作。

清单 16. writeImpl() 方法

private void writeImpl (byte[] data, int offset, int length) {    if (index >= limit)     index = limit = 0;    if (limit + length > capacity) {     capacity = capacity * 2 + length;     byte[] tmp = new byte[capacity];     System.arraycopy (buffer, index, tmp, 0, limit - index);     buffer = tmp;     limit -= index;     index = 0;    }    System.arraycopy (data, offset, buffer, limit, length);    limit += length;   }

下面清单 17 中显示的内部输出流实现表示了一个流将数据写入内部输出流 缓冲区。该代码验证参数都是可接受的,并且如果是这样的话,它调用 writeImpl() 方法。

清单 17. 内部输出流实现

private class OutputStreamImpl extends OutputStream {    public void write (int datum) throws IOException {     one[0] = (byte) datum;     write (one, 0, 1);    }    public void write (byte[] data, int offset, int length)      throws IOException {     if (data == null) {      throw new NullPointerException ();     } else if      ((offset < 0) || (length < 0) || (offset + length > data.length)) {      throw new IndexOutOfBoundsException ();     } else if (eof) {      throw new IOException ("Stream closed");     } else {      writeImpl (data, offset, length);     }    }

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

时间:2011-06-21 Merlin Hughes

最后,当输出引擎关闭其输出流,表明它已写入了所有的数据时,该输出流 设置输入流的 eof 标志,表明已经读取了所有的数据。

清单 18. 设置输入

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