BufferedReader和BufferedWriter

字符流的缓冲区:缓冲区的而出现提高了对数据的读写效率
对应类:BufferedWriter  BufferedReader
缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。实际上BufferedReader和BufferedWriter是对FileReader和FileWriter的装饰模式
BufferedWriter:

bufw.newLine();

public class BufferedWriterDemo {

    private static final String LINE_SEPARATOR =System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {

        FileWriter fw= new FileWriter("buf.txt");
//为了提高效率。使用字符流的缓冲区
//创建了一个字符写入流的缓冲区对象,并和指定缓冲流对象相关联
BufferedWriter bufw=new BufferedWriter(fw);
//使用缓冲区的写入方法将数据先写入缓冲区中
//bufw.write("afdafdsdgg"+LINE_SEPARATOR+"fggag");
bufw.write("xifasf2");
bufw.newLine();
bufw.write("xifasf");
for (int x = 0; x <4; x++) {
bufw.write("xifasf");
bufw.newLine();
}
//使用缓冲区的刷新方法将数据刷到目的地中
//bufw.flush();
//关闭缓冲区。其实关闭的就是缓冲的流对象
bufw.close();
}
}

BufferedReader:

line=buf.readLine()

public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr= new FileReader("buf.txt");
BufferedReader buf=new BufferedReader(fr);
String line=null;
while((line=buf.readLine())!=null){
System.out.println(line);
}
buf.close();
}

练习: 自定义的读取缓冲区。其实就是模拟BufferedReader。

分析:
* 缓冲区中无非就是封装了一个数组
* 并对完提供了更多的方法对数组进行访问
* 其实这些方法最终操作的都是数组的角标
* 缓冲的原理:
* 其实就是从源中获取一批数据装进缓冲区中
* 在从缓冲区中不断取出一个一个数据
* 在此次取完后,再从源中继续取一批数据进缓冲区
* 当源中的数据取光时,用-1作为结束标记

public class MyBufferedReader {
private FileReader r;
//定义一个数组作为缓冲区
private char[] buf=new char[1024];
//定义一个指针用于操作这个数组中的元素。当操作到最后一个元素后,指针归0;
private int pos=0;
//定义一个计数器用于记录缓冲区的数据个数。当数据减到0,就从源中继续读取数据到缓冲区中。
private int count=0; MyBufferedReader(FileReader r){
this.r=r;
} public int myRead() throws IOException{
if(count==0){
count=r.read(buf);
pos=0;
}
if(count<0){
return -1;
}
char ch=buf[pos++];
count--;
return ch; } public String myReadLine() throws IOException{
StringBuilder sb=new StringBuilder();
int ch=0;
while ((ch=myRead())!=-1){
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
//将缓冲区中读到的字符,存储到缓存行数据的缓存区中。
sb.append(ch);
}
if(sb.length()!=0){
return sb.toString();
}
return null;
} }

最新文章

  1. Effective C#中文版
  2. mybatis与 Exception
  3. 读 《.Net 之美》解析.Net Remoting (应用程序域)-- Part.1
  4. PHP读取word文档
  5. 周赛-Heros and Swords 分类: 比赛 2015-08-02 08:30 11人阅读 评论(0) 收藏
  6. NOR Flash擦写和原理分析 (一)
  7. 学习STL-介绍一下STL
  8. android学习日记06--SurfaceView视图
  9. 如何用C#检查硬盘是否是固态硬盘SSD
  10. Django web 开发指南 no such table:
  11. 在linux下实现UBOOT的TFTP下载功能
  12. MathJax测试
  13. cocos2d/-x 用CCRenderTexture为一个CCLabelTTF创建阴影。
  14. 【HTML5游戏开发小技巧】RPG情形对话中,令文本逐琢夸出
  15. KB奇遇记(2):缘起
  16. MySQL一些中重要命令
  17. smtp
  18. 安装Ubuntu Server18.04(附与CentOS占用体积和Python版本的对比)
  19. 【Java】的四种引用的区别
  20. BeanFactoryPostProcessor vs BeanPostProcessor

热门文章

  1. mysql创建数据库指定编码uft8
  2. Liferay7 BPM门户开发之47: 集成Activiti待办已办任务清单和流程启动
  3. Netty学习一:基本知识
  4. SSIS的DelayValidation属性
  5. 使用SSIS进行数据清洗
  6. javascript语句——表达式语句、块语句、空语句和声明语句
  7. Windows Azure Active Directory (2) Windows Azure AD基础
  8. Ionic2学习笔记(2):自定义Component
  9. java.io.File中的pathSeparator与separator的差异
  10. 关于Html与css的一些解释