IO流1-2

来源:互联网 发布:数据之巅 百度云 编辑:程序博客网 时间:2024/05/16 14:49

IO

根据处理的数据不同;分为:字节流和字符流

 

所有的数据都是以字节体现的。

后期产生了字符流。

因为字符数据涉及到了编码问题。

所以在字符流对象中加入了编码机制。

 

如果处理的数据都是字符数据,只是可以使用字符流对象来完成。

 

字符流体系中:有两个基类。

 

Reader

FileReader

BufferedReader

Writer

FileWriter

BuffereWriter

 

 

IO2

装饰和继承。

装饰设计模式是一种解决某一类问题的思想。该类问题的有效解决方案。

解决给类提供增强型功能的问题。

继承:是面向对象的特征之一。

 

Writer

|--TextWriter

|--MediaWirter

 

该体系的出现已经可以完成对文本数据和媒体数据的写操作。

但是发现。效率较低。为了提高效率,就加入了缓冲技术。

文本写入需要缓冲

媒体写入需要缓冲

 

按照面向对象的思想,为了提高扩展,

通过继承的方式完成。

Writer

|--TextWriter

|--BufferedTextWriter

|--MediaWirter

|--BufferedMedieWriter

 

这就完成了文本和媒体数据写操作效率提高。

 

当如果该体系加入一个子类 BaseWriter,而且该子类也许要效率提高。

Writer

|--TextWriter

|--BufferedTextWriter

|--MediaWirter

|--BufferedMedieWriter

|--BaseWriter

|--BufferedBaseWriter

如果体系扩展,都需要定义一个该子类具备高效缓冲功能的子类。

这样体系扩展很麻烦。

 

如何把这个体系出现问题解决一下,并优化一下呢?

 

我们发现,这些子类使用的缓冲技术都是一样的。

缓冲区其实就是定义了临时存储容器将数据进行临时缓冲,

至于具体的写操作,还是Writer的子类对象完成的,比如 TextWriter. MediaWriter等。

 

既然这样,可以将缓冲技术单独封装成一个对象,

要对哪个具体对象进行缓冲技术的使用,只要将该对象传递给缓冲区对象即可。

 

 

//对缓冲区对象进行单独描述。

class BufferedWriter extends Writer

{

BufferedWriter(Writer w)

{}

// BufferedWriter(TextWriter tw)

// {}

// BufferedWriter(MediaWriter dw)

// {}

}

当缓冲技术单独封装成了对象后,它具备的还是写功能,只不过可以其他对象的写功能进行高效。

所以它还是Writer类中的一员。

 

所以这时体系变成了

Writer

|--TextWriter

|--MediaWirter

|--BufferedWriter:这是一个提供增强功能的类。就把这种优化方式,定义成一种最终的解决该问题的解决方案,并起个名字:装饰设计模式。

 

和原来的体系,变的很清爽。

Writer

|--TextWriter

|--BufferedTextWriter

|--MediaWirter

|--BufferedMedieWriter

 

装饰设计模式的出现可以对一组类进行功能的增强。

而且装饰类本事也是该体系中的一个子类。

 

代码体现:

通常情况下,

装饰类一般不单独存在。

都是通过构造函数接收被装饰的对象。

基于被装饰的对象的功能,并对外提供增强行的功能。 

和继承的区别:

继承会让体系变得臃肿,装饰更为灵活。 

 

IO中装饰设计模式用的很多。

比如:BufferedWriter      BufferedReader

0 0
原创粉丝点击