java.io 困境

标签 java filereader inputstreamreader

类 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/

相关文章:

java - Android中的线程调用

java - java中忽略空格和制表符

javascript - 只有在方法返回 promise 完成后才调用

android - 无法关闭 InputStreamReader

java - 如何在不阻塞的情况下从 Java 中的 BufferedReader 读取数据?

Java 和 XSS : How to html escape a JSON string to protect against XSS?

java - “if” 语句与 OO 设计 - 2

java - list 合并失败 : Attribute application@appComponentFactory updating Firebase libraries

java - Spring 集成: File Reading Splitting and Message Filtering

java - BufferedReader 可以读取在线托管的文本文件吗?