首页 > 代码库 > 黑马程序员——字符流的缓冲区详解

黑马程序员——字符流的缓冲区详解

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
 
public class Demo1 {
 
/**
 * @param args
 * 字符流的缓冲区
 * BufferedWriter
 * BufferedReader
 * 缓冲区要结合流才可以使用
 * 在流的基础上对流动功能进行增强
 * 
 * 缓冲区的出现是为了提高,流的操作效率而出现的
 * 所以在创建缓冲区之前,必须要先有流对象
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建一个流对象
FileWriter fileWriter=new FileWriter("D://1.txt");
//为了提高字符流的写入效率,加入缓冲技术
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
//只要将需要被提高效率的流对象作为参赛传入到缓冲区的构造函数中
 
bufferedWriter.write("fafadsf");
bufferedWriter.newLine();
bufferedWriter.write("afadsdfasf");
//缓冲区,一定要刷新
bufferedWriter.flush();
//就是关闭缓冲区的流对象
bufferedWriter.close();
 
 
 
}
 
}
package Excr191;
 
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
 
public class Demo2 {
 
/**
 * 字符流读取流缓冲区
 * 该缓冲区提供了一个异常读一行的方法,方便于对文本数据的获取
 * 方法是readline
 * 当返回null时,表示读到文件末尾
 * 
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建一个读取流对象和文件相关联的
FileReader fileReader=new FileReader("D://1.txt");
//为了提高效率缴入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数
BufferedReader bufferedReader=new BufferedReader(fileReader);
String lineString=null;
while ((lineString=bufferedReader.readLine())!=null) {
System.out.println(lineString);
 
}
 
String readString=bufferedReader.readLine();
System.out.println(readString);
bufferedReader.close();
}
 
}
package Excr191;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
import javax.management.RuntimeErrorException;
 
public class Demo3 {
 
/**字符读取流缓冲区
 * 该缓冲区提供了一个一次度一行的方法 readLine,方便于对文本数据的获取
 * 当返回null是,表示读到文件末尾
 * 
 * readLine方法返回的是时候只有返回回车符之前的数据内容,并不返回回车符
 * 
 * readLIne方法返回的时候只返回回车符之前的内容
 * 通过缓冲区复制一个。java文件
 * readline方法的原理:
 * 无论是读一行,获取读取多个字符。其实最终都是在硬盘上一个一个的读取。
 * 所以最终使用的还是read方法读一个的方法
 * @param args
 * @throws IOException 
 */
public static void main(String[] args)   {
// TODO Auto-generated method stub
BufferedReader bufferedReader=null;
BufferedWriter bufferedWriter=null;
 
try {
bufferedReader=new BufferedReader(new FileReader("D://1.txt"));
bufferedWriter=new BufferedWriter(new FileWriter("D://aa.txt"));
String line=null;
while ((line=bufferedReader.readLine())!=null) {
bufferedWriter.write(line);
bufferedWriter.flush();}
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeErrorException(null, "读写失败");
}
finally
{
try {
if (bufferedReader!=null) {
bufferedReader.close();
}
} catch (Exception eqwertyuioplkjhgfdsazxcvbnm) {
// TODO: handle exception
}
 
}
}
 
}
package Excr191;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class Demo4 {
 
/**明白了BUfferedReader类中特有方法readLine的原理后
 * 可以自定义一个类中包含一个功能hereadLine一致的方法
 * 来模拟一下BufferedReader
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileReader fileReader=new FileReader("D:\\1.txt");
 
 
}
 
}
class MyBufferedReader{
//可以一次读一行的方法
private FileReader rFileReader;
MyBufferedReader(FileReader rFileReader)
 
{
this.rFileReader=rFileReader;
}
 
public String myreadLine() throws IOException
{
//定义一个临时容器,源BufferReader封装的是字符数组
//为了演示方便,定义了一个StringBuilder容器,因为最终还是要将数据变成字符串
StringBuilder stringBuilder=new StringBuilder();
int ch=0;
while((ch=rFileReader.read())!=-1)
{
if (ch==‘\r‘) 
continue;
if(ch==‘\n‘)
return stringBuilder.toString();
else {
stringBuilder.append((char)ch);
}
 
}
return null;
 
}
}
 

黑马程序员——字符流的缓冲区详解