类 java.io.Reader 和 java.io.InputStreamReader 都有具有完全相同签名的读取方法
public int read(char[] charbuf, int offset, int length) throws IOException
现在根据 java 文档,java.io.FileReader 类从上述两个类继承两个这些 read() 方法。
现在 FileReader 扩展了 InputStreamReader,后者进一步扩展了 Reader
(Reader <-- Inputstreamreader <-- FileReader)
并且 read() 在两个类中具有相同的签名,难道不应该是 InputStreamReader 覆盖了 Reader 的 read() 而 FileReader 继承了那个被覆盖的方法吗?或者我在这里遗漏了什么??
此外,FileReader 继承的两个 read() 的功能略有不同(大约一个 block 在等待输入而另一个不等待输入)。
最佳答案
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
仅覆盖其中的前两个。也许这就是让您感到困惑的原因?
关于java.io 困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581153/