我看到API文档上写的BufferedWriter(Writer out)
然后大多数都是先new一个filewriter的对象,然后再用bufferedwriter来写
我想知道BufferedWriter构造器的形参到底是什么形式的
------解决思路----------------------
Writer是个抽象类,是FileWriter,BufferedWriter的父类
实际传入的是它的子类,比如FileWriter,然后进行组合包装添加功能
去看看设计模式的装饰(器)模式
你就会明白为什么这么设计了
------解决思路----------------------
装饰器模式的类就是都实现了同一个接口,需要的功能可以动态装饰进去
------解决思路----------------------
io流可以有以下划分:
1.按照流向的不同,分为输入流和输出流
2.按照处理的数据的单位不同,分为字节流和字符流
3.按照角色的不同,分为节点流(字符流)和处理流,节点流是直接作用在文件上,其他的为处理流,处理流主要用来提高文件处理速度
Writer是字符输出流的抽象基类,FileWriter是个字符流直接作用于文件上,BufferedWriter是个处理流,是用来提高字符输出流输出效率的,所以说在创建这个处理流的时候,必须先要有字符流对象,明确处理的是谁,提高的是谁,这就是包装,装饰模式。
------解决思路----------------------
BufferedWriter类覆盖了基类中的读数据行为,利用缓冲区来提高读写效率
参数指定了需要被缓冲的输出流,比如你的文件输出流是FileWriter,用BufferedWriter来缓冲
java流可以从不同的角度对流进行分类:
处理的数据单位不同,可分为:字符流,字节流
数据流方向不同,可分为:输入流,输出流
功能不同,可分为:节点流,处理流
节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,例如FileInputStream和FileOutputStream,他们直接从文件中读取或往文件中写入字节流。
处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。过滤流是使用一个已经存在的输入流或输出流连接创建的,过滤流就是对节点流进行一系列的包装。例如BufferedInputStream和BufferedOutputStream,使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率,以及DataInputStream和DataOutputStream,使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。他们都属于过滤流。
节点流类型常见的有:对文件操作的字符流有FileReader/FileWriter,字节流有FileInputStream/FileOutputStream。
处理流类型常见的有:缓冲流:缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写效率,同事增加了一些新的方法。