一周转眼就过去了,天天过的感觉很慢,可是现在想想也挺快的,为什么这么慢呢!应该就是我没怎么好好听课,也没怎么听懂啊!这周学了挺多的东西,比大一时学的难多了,留的作业也是比较难做,几乎自己都完不成。
这周主要学的就是输入/输出流数据流分为输入流(InputStream)和输出流(OutputStream)两大类。输入流只能读不能写,而输出流只能写不能读。通常程序中使用输入流读出数据,输出流写入数据,就好像数据流入到程序并从程序中流出。
缓冲流为提高数据的传输效率,通常使用缓冲流(buffered stream),即为一个流配有一个缓冲区(buffer),一个缓冲区就是专门用于传送数据的一块内存。
转换流我就没弄怎么明白
Reader
|--InputStreamReader
|--FileReader:专门用于处理文件的字符读取流对象。
Writer
|--OutputStreamWriter
|--FileWriter:专门用于处理文件的字符写入流对象。
特点:
1,是字节流和字符流之间的桥梁。
2,该流对象中可以对读取到的字节数据进行指定编码表的编码转换。
什么时候使用呢?
1,当字节和字符之间有转换动作时。
2,流操作的数据需要进行编码表的指定时。
具体的对象体现:
1,InputStreamReader:字节到字符的桥梁。
2,OutputStreamWriter:字符到字节的桥梁。
这两个流对象是字符流体系中的成员。那么它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。
还有装饰说实话,对于装饰,我根本没理解到什么程度,就像课件中说的房子都还没着落,谈什么装修和粉饰啊。一堵粗糙的墙,刷上白白地粉,再贴上几张壁画,整个一焕然一新,多美的事啊。说的容易对我来说还很难,我只能根据课件,随便看看了。
装饰模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
举例来说: 现实生活中,U盘、MP3播放器、手机等具有USB接口的电子产品一般具有USB最基本的功能,那就是数据传输----写数据和读数据,因此,抽象出一个接口:
// USB接口
public interface IUSB
{
// 读数据
void ReadData();
// 写数据
void WriteData();
}
分别让U盘和MP3播放器来实现数据传输功能:
// U盘
public class UDisk:IUSB
{
#region IUSB 成员
public void ReadData()
{
Console.WriteLine("U盘读数据.....");
}
public void WriteData()
{
Console.WriteLine("U盘写数据....");
}
#endregion
}
public class MP3Player:IUSB
{
#region IUSB 成员
public void ReadData()
{
Console.WriteLine("Mp3播放器读数据.....");
}
public void WriteData()
{
Console.WriteLine("Mp3播放器写数据....");
}
#endregion
}
// 装饰者
public class Decorator:IUSB
{
private IUSB usb;
public Decorator(IUSB usb)
{
this.usb = usb;
}
#region IUSB 成员
public virtual void ReadData() //其实执行的是IUSB的ReadData
{
usb.ReadData();
}
public virtual void WriteData() //其实执行的是IUSB的WriteData
{
usb.WriteData();
}
#endregion
}
这里装饰者Decorator与IUSB之间的关系满足is – a关系,即Decorator is-a IUSB,即子类一定是父类,而父类不一定是子类。
装饰模式是为已有的功能动态地添加更多功能的一种方式。
当系统需要新功能的时候,若向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为,但这种做法的问题在于,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。而装饰模式切提供了一个非常好的解决方案,他把每个要装饰的功能都放在单独的类中,并让这个类包装他所要装饰的对象,因此,当需要执行特殊行为时,客户端代码就可以在运行时更具需要有选择地、顺序地使用装饰功能包装对象了。