快速业务通道

彻底转变流,第2部分:优化Java内部I/O - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
   // throw any pending exception    exceptionCheck ();    // determine how much can be read    int amount = available (READER);    // return 0 on EOF, otherwise the amount readable    return (amount < 0) ? 0 : amount;   }   private int checkedAvailable (boolean rw) throws IOException {    // always called from synchronized(this) method    try {     int available;     // loop while no data can be read/written     while ((available = available (rw)) == 0) {      if (rw == READER) { // reader       // throw any pending exception       exceptionCheck ();      } else { // writer       // throw an exception if the stream is closed       closedCheck ();      }      // throw an exception if the pipe is broken      brokenCheck (rw);      if (!nonBlocking) { // blocking mode       // wake any sleeping thread       if (sleeping)        notify ();       // sleep for timeout ms (in case of peer thread death)       sleeping = true;       wait (timeout);       // timeout means that hysteresis may not be obeyed      } else { // non-blocking mode       // throw an InterruptedIOException       throw new InterruptedIOException        ("Pipe " + (rw ? "full" : "empty"));      }     }     return available;    } catch (InterruptedException ex) {     // rethrow InterruptedException as InterruptedIOException     throw new InterruptedIOException (ex.getMessage ());    }   }   private int available (boolean rw) {    // calculate amount of space used in pipe    int used = (writex + capacity * 2 - readx) % (capacity * 2);    if (rw == WRITER) { // writer     // return amount of space available for writing     return capacity - used;    } else { // reader     // return amount of data in pipe or -1 at EOF     return (eof && (used == 0)) ? -1 : used;    }   }

彻底转变流,第2部分:优化Java内部I/O(9)

时间:2011-06-21 Merlin Hughes

清单 13 中的方法关闭这个流;该方法还提供对读程序或写程序关闭流的支 持。阻塞的线程被自动唤醒,该方法还检查各种其它情况是否正常。

清单 13. 关闭流

public void close () throws IOException {    // close the read end of this pipe    close (READER);   }   private synchronized void close (boolean rw) throws IOException {    if (rw == READER) { // reader     // set closed flag     closed = true;    } else if (!eof) { // writer     // set eof flag     eof = true;     // check if data remain unread     if (available (READER) > 0) {      // throw an exception if the reader has already closed the pipe      closedCheck ();      // throw an exception if the reader thread has died      brokenCheck (WRITER);     }    }    // wake any sleeping thread    if (sleeping) {     notify ();     sleeping = false;    }   }

清单 14 中的方法检查这个流的状态。如果有异常待处理,那么流被关闭或

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