------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
字符流的缓冲区:
缓冲区的出现提高了对数据的读写效率。
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须先有流对象。
该缓冲区中提供了一个跨平台的换行符。
newLine():写入一个行分隔符。 window版本封装的是\r\n Linux中封装的是\n
1.创建一个字符写入流对象。
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
3. 记住,只要用到缓冲区,就要刷新。
4.关闭缓冲区,其实就是在关闭字符写入流对象。
字符读取流缓冲区:
该缓冲区提高了一个一次读 一行的技术,
返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
读取方法:读一个,读数组,读一行。
1.创建一个读取流对象和文件相关联。
2.为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数。
-------------------------------------
装饰和继承:
MyReader//专门用于读取数据的类。
|--MyTestReader
|--MyBufferReader
|--MyMediaReader
|--MyBufferMediaReader
|--MyDataReader
|--MyBufferDataReader
class MyBufferReader
{
MyBufferReader(MyTextReader text)
{}
MyBufferReader(MyMediaReader media)
{}
}
上面这个类扩展性极差。
找到其参数的共同类型,通过多态的形式,可以提高扩展性。
class MyBufferReader extends MyReader
{
private MyReader r;
MyBufferReader(MyReader r)
{
this.r = r;
}
}
MyReader//专门用于读取数据的类。
|--MyTextReader
|--MyMediaReader
|--MyDataReader
|--MyBufferReader
装饰模式比继承要灵活,避免了继承体系臃肿。而且降低类与类之间的关系。
------------------------------------
LineNumberReader是BufferedReader的子类。
跟踪行号的缓冲字符输入流。
此类定义了方法setLineNumber(int)和getLineNumber().它们分别用于设置和获取当前行号。
------------------------
/*
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。
*/
//普通类
class Person
{
public void eat()
{
System.out.println("吃饭");
}
}
//装饰类,增强Person类的功能。
class SuperPerson
{
private Person p;
SuperPerson(Person p)
{
this.p = p;
}
public void superEat()
{
System.out.println("开胃酒");
p.eat();
System.out.println("甜点/餐后水果");
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
SuperPerson sp = new SuperPerson(p);
sp.superEat();
}
}
缓冲区的出现提高了对数据的读写效率。
对应类:
BufferedReader
BufferedWriter
缓冲区要结合流才可以使用。
在流的基础上读流的功能进行了增强。
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须先有流对象。
该缓冲区中提供了一个跨平台的换行符。
newLine():写入一个行分隔符。 window版本封装的是\r\n Linux中封装的是\n
1.创建一个字符写入流对象。
2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
3. 记住,只要用到缓冲区,就要刷新。
4.关闭缓冲区,其实就是在关闭字符写入流对象。
字符读取流缓冲区:
该缓冲区提高了一个一次读 一行的技术,
返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
读取方法:读一个,读数组,读一行。
readLine();读一行。
skip();跳过字符。
1.创建一个读取流对象和文件相关联。
2.为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数。
-------------------------------------
装饰和继承:
MyReader//专门用于读取数据的类。
|--MyTestReader
|--MyBufferReader
|--MyMediaReader
|--MyBufferMediaReader
|--MyDataReader
|--MyBufferDataReader
class MyBufferReader
{
MyBufferReader(MyTextReader text)
{}
MyBufferReader(MyMediaReader media)
{}
}
上面这个类扩展性极差。
找到其参数的共同类型,通过多态的形式,可以提高扩展性。
class MyBufferReader extends MyReader
{
private MyReader r;
MyBufferReader(MyReader r)
{
this.r = r;
}
}
MyReader//专门用于读取数据的类。
|--MyTextReader
|--MyMediaReader
|--MyDataReader
|--MyBufferReader
装饰模式比继承要灵活,避免了继承体系臃肿。而且降低类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的。
------------------------------------
LineNumberReader是BufferedReader的子类。
跟踪行号的缓冲字符输入流。
此类定义了方法setLineNumber(int)和getLineNumber().它们分别用于设置和获取当前行号。
------------------------
/*
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。
*/
//普通类
class Person
{
public void eat()
{
System.out.println("吃饭");
}
}
//装饰类,增强Person类的功能。
class SuperPerson
{
private Person p;
SuperPerson(Person p)
{
this.p = p;
}
public void superEat()
{
System.out.println("开胃酒");
p.eat();
System.out.println("甜点/餐后水果");
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
SuperPerson sp = new SuperPerson(p);
sp.superEat();
}
}
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------