类java.io.Reader和java.io.InputStreamReader都具有完全相同的签名的读取方法。
public int read(char[] charbuf, int offset, int length) throws IOException现在,根据java文档,类java.io.FileReader继承了,,这些读()方法来自,都是,上面提到的类。
现在FileReader扩展了InputStreamReader,它进一步扩展了阅读器
(Reader <-- Inputstreamreader <-- FileReader)而且read()在两个类中都有相同的签名,难道不是InputStreamReader重写了Reader的read(),而FileReader继承了重写的方法吗?还是我漏掉了什么??
另外,FileReader继承的两个read()的功能略有不同(在等待输入时大约有一个块,而另一个没有)。
发布于 2012-05-14 10:08:11
InputStreamReader中的方法为Reader中的抽象方法提供了实现。FileReader不再覆盖该方法;它只是从InputStreamReader继承实现。
请注意,有四个签名可供阅读:
public int read()
public int read(char[] cbuf, int offset, int length)
public int read(char[] cbuf)
public int read(CharBuffer target)InputStreamReader只覆盖其中的前两个。也许这就是让你困惑的原因?
发布于 2012-05-14 10:09:31
让我们检查一下源代码,好吗?
类阅读器
abstract public int read(char[] cbuf,
int off,
int len) throws IOException所以,abstract,这里没什么可看的。
类InputStreamReader
public int read(char[] cbuf,
int offset,
int length) throws IOException
{
return sd.read(cbuf, offset, length);
}因此,这里我们有一个来自Reader的方法的重写。
最后,FileReader没有这样的方法定义,所以它只是从InputStreamReader继承它。
https://stackoverflow.com/questions/10581153
复制相似问题