也学习多线程一段时间了,也写了几个简单实用的功能类,也意思到细节的处理的重要性,现在就让我们来写一个稍稍更有用的异步IO的类。
本来想参考Java NIO 中的类,Java NIO作为新io包,本身提供了可在非阻塞模式下的io流,但现在我们用之前的自己做的类,来尝试一下自己定义,我们还是找个范本吧,就用Java.io.BufferedInputStream这个类。
首先该类必须继承与Thread或实现Runnable接口,但我们还要用到以前的底层的流通道,所以必须继承于一个inputStream类,所以不能继承Thread了,只能选用实现Runnable。
有了最初的定义:
AsyncInputStream extends FilterInputStream implements Runnable{}
我们要通过read函数来从缓冲区读,所以累内要有read函数的定义:
参见BufferedInputStream,它有两个个public 的read函数,而且这两个函数在FilterInputStream 中都有,不过有点区别的是子类中的两个read都是synchronized修饰的,父类的则是未修饰的。考虑到我们是一个对象执行一个线程并且不存在一个对象同时读两个缓存区的内容。故我们没有定义为synchronized的。
所以我们有了两个read函数的定义:
public int read() throws IOException{}
public int read(byte b[], int off, int len) throws IOException{}
当然还有一个返回还有多少个字节可以被读的函数:
public int long available() throws IOException {}
还有一个skip函数()
public int skip() {}
一个关闭io流的close函数:
public void close() {}
还有和缓冲区配套的函数:
public void mark(){}