java 输入输出语句,为什么要一层层的包住呢,直接用最外面的流不行么
发布网友
发布时间:2022-11-08 01:37
我来回答
共6个回答
热心网友
时间:2023-11-06 19:23
因为你要实例化的类没有无参构造函数,所以必须传入相应的参数。
这是一种写法,比较方便,结构紧凑。
BufferedReader br = new BufferedReader
(new FileReader("d:/java/javatest/BufferedStream.txt"));
也可以这样写:
String path = "d:/java/javatest/BufferedStream.txt";
FileReader file = new FileReader(path);
BufferedReader br = new BufferedReader(file);
-------------------------------------------------------------------
反正就是你要实例化这个类,就要看看这个类的构造函数是什么。这样一级一级下去就行了。
热心网友
时间:2023-11-06 19:24
这个如果你没有学习过设计模式的话,你应该是不能理解的。
这里用到了Java设计模式中的 装饰模式。
通过层层包装来赋予新的功能。 也可以通过不同的包装来组合成不一样的功能。
通过继承也可以实现这些功能,但是继承是在运行前就固定的。
而装饰模式,可以动态的贴上一个“装饰”,也可以动态的去掉一个不需要的“装饰”,比继承拥有更强的灵活性。
当然,更加灵活的代价就是更加容易出错,甚至组合出一些匪夷所思的功能。
热心网友
时间:2023-11-06 19:24
这里用到了设计模式中的装饰者模式。
BufferedReader 在读取文件字节流过程中起到缓冲作用,可以提高IO读取效率。
只所以在这里用到所谓的层层包住,只是在构造函数中传入FileReader对象,自己封装的话也可以以set的方式传入,Buffer实际意义是缓冲、提高性能,
实际读取文件操作还是在 FileReader 处理的。
热心网友
时间:2023-11-06 19:25
您好,这个是不行的,因为BufferedReader 的构造方法如下:
1.BufferedReader(Reader in)
2.BufferedReader(Reader in, int sz)
都需要一个Reader作为传参。
而FileReader继承与Reader,构造方法有
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
所以可以由FileReader作为它的传参。
而这也体现了一种设计模式,装饰模式,楼主可以百度一下,主要是追加功能的。
希望您的采纳,谢谢
热心网友
时间:2023-11-06 19:25
FileReader fr = new new FileReader("d:/java/javatest/BufferedStream.txt");//读取文件路径,转换成文件流,要读取此句即可
BufferedReader br = new BufferedReader(fr);//读取的时候会提高效率而已
热心网友
时间:2023-11-06 19:26
简单的说,就是BufferedReader的构造函数的参数需要的是一个FileReader类对象而不是一个字符串。
就像你定义了一个函数public void function(int i){},你要用这个函数的时候就必须给他一个int 类型的值,而不能是字符串或者其他。