彻底转变流,第2部分:优化Java内部I/O - 编程入门网
final int DEFAULT_TIMEOUT_MS = 1000;
// flag indicates whether method applies to reader or writer
private static final boolean READER = false, WRITER = true;
// internal pipe buffer
private byte[] buffer;
// read/write index
private int readx, writex;
// pipe capacity, hysteresis level
private int capacity, level;
// flags
private boolean eof, closed, sleeping, nonBlocking;
// reader/writer thread
private Thread reader, writer;
// pending exception
private IOException exception;
// deadlock-breaking timeout
private int timeout = DEFAULT_TIMEOUT_MS;
public PipeInputStream () {
this (DEFAULT_BUFFER_SIZE, DEFAULT_HYSTERESIS);
}
public PipeInputStream (int bufferSize) {
this (bufferSize, DEFAULT_HYSTERESIS);
}
// e.g., hysteresis .75 means sleeping reader/writer is not
// immediately woken until the buffer is 75% full/empty
public PipeInputStream (int bufferSize, float hysteresis) {
if ((hysteresis < 0.0) || (hysteresis > 1.0))
throw new IllegalArgumentException ("Hysteresis: " + hysteresis);
capacity = bufferSize;
buffer = new byte[capacity];
level = (int) (bufferSize * hysteresis);
}
彻底转变流,第2部分:优化Java内部I/O(7)时间:2011-06-21 Merlin Hughes清单 9 中的配置方法允许您配置流的超时值和非阻塞模式。超时值的单位是 毫秒,它表示阻塞的线程在过了这段时间后将被自动唤醒;这对于打破在一个线 程死亡的情况下可能发生的死锁是必要的。在非阻塞模式中,如果线程阻塞,那 么 InterruptedIOException 将被抛出。 清单 9. 管道配置
清单 10 中的读方法都遵循相当标准的模式:如果我们还没有读线程的引用 ,那么我们先取得它,然后我们验证输入参数,核对流未被关闭或没有异常待处 理,确定可以读取多少数据,最后把数据从内部的环缓冲区复制到读程序的缓冲 区。清单 12 中的 checkedAvailable() 方法在返回前自动地等待,直到出现一 些可用的数据或流被关闭。 清单 10. 读数据
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |