12.5字符流
五.缓冲字符流BufferedReader/Buffreedwriter
1.目的:采用缓冲字符流是为了提高对流操作的效率;
2. 构造方法
public BufferedReader(Reader in); 创建默认字符大小的缓冲字符流
public BufferedReader(Reader in ,int sz) 创建指定字符大小的缓冲字符流
public BufferedWriter(Writer out)
public BufferWriter(Writer out,int sz)
3.特有方法
(1)BufferedReader()特有方法public String readLine();/一次读一行,遇到行标记时将该行作为字符串返回。末尾返回null
(2)BufferedWriter()特有的方法public void newLine();写入分割符
4.使用缓冲字符流
(1)BufferedReader
FileReader fr=null;
BufferedReader br=null;
fr=new FileReader("F:\\JAVA\\lesson\\src\\res\\demo1.txt ");//读文件
br=new BufferedReader(fr,255);//缓冲流//创建字符为255的缓冲字符流
String str=null;
while((str=br.readLine())!=null){// 利用readLine()方法读出缓冲区里的内容并赋给str
System.out.println(str);
}
(2) BufferedWriter
fw=new FileWriter("F:\\JAVA\\lesson\\src\\res\\BufferedDemo1.txt");// \\=/
bw=new BufferedWriter(fw);//创建默认字符大小的缓冲区
bw.write("hello");//写入到bw缓冲区中。而不是写入FileWriter
5.模拟创建缓冲字符流
(1)
import java.io.*;
public class myBufferReader {
//属性
private Reader r;//代表普通输入流
//构造方法
public myBufferReader(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'){//'\n'换行'\r'回车
continue;
}
if(ch=='\n'){
return new String(strB);//return strB.toString()等同//读到换行标记时返回
}else
strB.append((char)ch);//读到的不是换行符 将ch转换成字符 存到缓存区里
}
} catch (IOException e) {
e.printStackTrace();
}
if(strB.length()!=0){//文件达到末尾行strB长度不为0 返回strB
return new String(strB);
}
return null;//文件文件达到末尾行strB长度为0;返回null;
}
//close();
public void close(){
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(2)创建缓冲区、利用缓冲区读/写数据。遇到换行则写入/读出。否则将字符存在缓存去内。