Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileReader如何构造FileInputStream和InputReader?_Java - Fatal编程技术网

Java FileReader如何构造FileInputStream和InputReader?

Java FileReader如何构造FileInputStream和InputReader?,java,Java,我有点怀疑,这可能是一个很蹩脚的问题,但请容忍我 我正在检查FileReader的源代码。因此,当FileReader创建时,它会构造FileInputStream。下面是代码片段 public class FileReader extends InputStreamReader { public FileReader(String fileName) throws FileNotFoundException { super(new FileInputStream

我有点怀疑,这可能是一个很蹩脚的问题,但请容忍我

我正在检查FileReader的源代码。因此,当FileReader创建时,它会构造FileInputStream。下面是代码片段

public class FileReader extends InputStreamReader {


    public  FileReader(String fileName) throws FileNotFoundException {

        super(new FileInputStream(fileName));

    }
我的疑问是FileReader扩展了InputStreamReader,FileReader是InputStreamReader的子代,但当调用FileReader的构造函数时,这怎么可能是supernew FileInputStreamfileName

在父类InputStreamReader中没有接受新FileInputStreamfileName作为参数的构造函数或方法

Fileinput流具有以下层次结构

 java.lang.Object
    java.io.InputStream
        java.io.FileInputStream
FileInputStream和InputStreamReader之间似乎没有任何关系

有人能帮我理解这一点吗?supernew FileInputStreamfileName的方式和来源;这里有人打电话吗

在父类InputStreamReader中没有接受新FileInputStreamfileName作为参数的构造函数或方法


是,但是InputStream的子类,因此FileReader构造函数正在调用。请记住,您可以将子类实例FileInputStream对象作为参数传递给接受超类实例InputStream对象作为参数的方法或构造函数。

@Andrea-无需将FileReader和FileInputStream关联起来;构造函数可以做任何它想做的事情,包括创建完全不相关的类的实例。在这里,FileReader正在创建一个不在其层次结构中的FileInputStream,以便它可以将其作为参数传递给superInputStream,它是InputStreamReaderInputStream。我建议您在Java站点上通读一遍,然后再阅读一些其他内容和/或一本优秀的Java初学者书籍。快乐编码@安德里亚——一点也不!我们都是新来的!:-@Crowder,最后一个问题…当我像FileReaderString文件名那样调用FileReader构造函数时,会创建不同的实例,1个FileReader本身2个InputStreamReader 3个FileInputStream。那么,我可以知道他们是如何排队阅读文件中的内容的吗?我的意思是哪个先连接到源文件,等等@Andrea-FileReader是InputStreamReader,它们是同一个对象。该对象创建一个FileInputStream来执行读取文件数据的实际工作;它做了一些额外的工作,以便提供面向读取器字符的API,而不是面向InputStream字节的API。@Crowder,所以我可以说……FileInputStream是由FIleReader包装的。对的如果我没有错的话,抽象模型将是这样的…Filereader-->FileInputStream-->SourceFile。但如果是这样的话,那么这两个函数是如何相互协调的,因为一个函数读取字节,另一个函数读取字符。。。。?其次,我无法理解您的评论,它做了一些额外的工作,因此它可以提供面向读者字符的API,而不是面向InputStream字节的API…您能详细说明一下吗?