首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.io困境

java.io困境
EN

Stack Overflow用户
提问于 2012-05-14 10:02:04
回答 2查看 166关注 0票数 4

类java.io.Reader和java.io.InputStreamReader都具有完全相同的签名的读取方法。

代码语言:javascript
复制
public int read(char[] charbuf, int offset, int length) throws IOException

现在,根据java文档,类java.io.FileReader继承了,这些读()方法来自,都是,上面提到的类。

现在FileReader扩展了InputStreamReader,它进一步扩展了阅读器

代码语言:javascript
复制
(Reader <-- Inputstreamreader <-- FileReader)

而且read()在两个类中都有相同的签名,难道不是InputStreamReader重写了Reader的read(),而FileReader继承了重写的方法吗?还是我漏掉了什么??

另外,FileReader继承的两个read()的功能略有不同(在等待输入时大约有一个块,而另一个没有)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-14 10:08:11

InputStreamReader中的方法为Reader中的抽象方法提供了实现。FileReader不再覆盖该方法;它只是从InputStreamReader继承实现。

请注意,有四个签名可供阅读:

代码语言:javascript
复制
public int read()
public int read(char[] cbuf, int offset, int length)
public int read(char[] cbuf)
public int read(CharBuffer target)

InputStreamReader只覆盖其中的前两个。也许这就是让你困惑的原因?

票数 4
EN

Stack Overflow用户

发布于 2012-05-14 10:09:31

让我们检查一下源代码,好吗?

阅读器

代码语言:javascript
复制
abstract public int read(char[] cbuf,
    int off,
    int len) throws IOException

所以,abstract,这里没什么可看的。

InputStreamReader

代码语言:javascript
复制
public int read(char[] cbuf,
    int offset,
    int length) throws IOException 

{
        return sd.read(cbuf, offset, length);
}

因此,这里我们有一个来自Reader的方法的重写。

最后,FileReader没有这样的方法定义,所以它只是从InputStreamReader继承它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10581153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档