|----缓冲区的出现提高了对数据的读写效率。 因此在创建缓冲区之前,必须要先有流对象。 缓冲区中提供了一个跨平台的方法,newLine();换行。 |----对应类 |----BufferedWriter |----BufferedReader 字符读取流缓冲区提供了一个一次读一行的方法readLine,方便于对文本数据的获取 当返回null时,表示读到文件末尾。 装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能。那么自定义的类就称为装饰类。如:BufferedReader中的readLine。 装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰对象的功能,提供更强的功能。 MyReader:专门用于读取数据的类 |----MyTextReader |----MyBufferedTextReader |----MyMediaReader |----MyBufferedMediaReader |----MyDataReader |----MyBufferedDataReader 每个子类都需要重新定义Buffered类,这样就需要对这些缓冲技术进行优化。 class MyBufferedReader { MyBufferedReader(MyTextReader text) {} MyBufferedReader(MyMediaReader media) {} } 又发现这个类的扩展性也很不好,那么我们就找到它参数的共同类型,通过多态的形式,能够提高扩展性。 class MyBufferedReader extends MyReader { private MyReader r; MyBufferedReader(MyReader r) {} } 这就是装饰模式。装饰模式比继承更灵活,避免了继承体系的臃肿,降低了类与类之间的关系。装饰类因为增强已有对象的功能,具备的功能和已有的是相同的,只不过是提供了更强大的功能,所以装饰类和被装饰类通常是属于一个体系中的。 通过优化后的体系: MyReader: |----MyTextReader |----MyMediaReader |----MyDataReader |----MyBufferedReader 字符流: |----FileReader |----FileWriter |----BufferedReader |----BufferedWriter 字节流: InputStream outputStream
|