30号文件

来源:互联网 发布:淘宝比价软件哪个好用 编辑:程序博客网 时间:2024/04/23 19:34

课堂笔记

一、缓冲字符流的初步了解

1.使用目的:提高工作效率

2.工作原理:是对已经存在的流进行的操作,先将数据源的内容保存到一块连续的内存地址(联系数组),再在缓冲区对数据流进行操作。

3.常用方法:

BufferedReader

public BufferedReader(Reader in) ;创建一个使用默认大小输入缓冲区的缓冲字符输入流

public BufferedReader(Reader in, int sz) sz指输入缓冲区的大小,如果sz0,则抛出IllegalArgumentException异常

③特有方法:public  String  readLine() throws  IOException:读取一个文本行,一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null

BufferedWriter

public BufferedWriter(Writer out) ;创建一个使用默认大小输入缓冲区的缓冲字符输出流

public BufferedWriter(Writer out, int sz); sz指输入缓冲区的大小,如果sz0,则抛出IllegalArgumentException异常

③特有方法:public void newLine(); 写出平台相关的行分隔符来标记一行的终止。Windows平台下为’\n

4.实质:使用缓冲的字符流时其实就是使用流对象的方法,只不过加入了数组,对数据进行了临时存储,为了提高操作数据的效率。

二、代码讲解

1. 

import java.io.*;

public class MyBufferedReader {

//类中的属性

private Reader r;

//构造方法

public MyBufferedReader(Reader r){

this.r=r;

}

//readLine()方法:增加一个缓冲区。然后调用r对象的read()读取字符放到缓冲区,

//当读到标记时,把缓冲区的字符 转换成字符串返回

public String readLine(){

//缓冲区

StringBuffer strB=new StringBuffer();

int ch=0;

try {

while((ch=r.read())!=-1){

if(ch=='\r')

continue;

if(ch=='\n')

return new String(strB);//返回字符串

else

strB.append((char)ch);//追加内容,运用强制类型转换

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if(strB.length()!=0)

return new String(strB);

return null;

}

//close()方法

public void close(){

try {

r.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

2.

import java.io.*;

public class BufferedIODemo2 {

public static void main(String[] arg){

FileReader fr=null;

BufferedReader br=null;

try {

fr=new FileReader("res/demo.txt");

br=new BufferedReader(fr,255);//参数是流

//255是指定的缓冲区得大小

String str=null;

while((str=br.readLine())!=null){

System.out.println(str);

}

等价于下面注释代码:

// str=br.readLine();

// while(str!=null){

// System.out.println(str);

//     str=br.readLine();

// }

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

if(br!=null){

try {

br.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

三、装饰设计模式和继承有什么区别?

答:装饰设计比继承更加灵活,不必对每个类都由子类去继承父类而加强其功能,装饰设计通过对缓冲技术和多态的运用,以父类作为操作对象,使程序设计更加便利。

原创粉丝点击