zoukankan      html  css  js  c++  java
  • 字符流-缓冲区-自定义myBufferedReader

    public class myBufferedReaderDemo {

    public static void main(String[] arg) throws IOException{
    FileReader fr = new FileReader("demo.txt");

    MyBufferedReader bufr = new MyBufferedReader(fr);
    String line = null;
    while((line = bufr.myReadLine()) != null){
    System.out.println(line);
    }
    }
    }

    //自定义缓冲区文件

    /*
    * 自定义的读取缓冲区。其实就是模拟一个BufferedReader
    * 分析:
    * 缓冲区无非就是封装一个数组
    * 并对外提供更多的方法对数组进行访问。
    *
    * 缓冲的原理:
    * 其实就是从源中获取一批数据装进缓冲区。
    * 在缓冲区中不断的去处一个一个数据。
    *
    * 在此次取完后,在从源中继续取一批数据进缓冲区。
    * 当源中的数据取光时,用-1作为结束标记。
    *
    *
    *
    */

    public class MyBufferedReader {
    private FileReader r;
    //定义一个字符数组作为缓冲区
    private char[] buf = new char[1024];

    //定义一个指针用于操作这个数组的元素,当操作到最后一个元素后,指针应该归零。
    private int pos =0;

    //定义一个计数器用于记录缓冲区的数据个数,当该数据减到0,就从源中继续获取数据到缓存区。
    private int count =0;

    MyBufferedReader(FileReader fileReader){
    this.r = fileReader;
    }

    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;


    /*
    //1.从源中获取一批数据到缓冲区。需要先做判断,只有计数器为0时,才需要从源中获取数据。
    if (count == 0) {
    count = r.read(buf);
    if (count < 0) {
    return -1;
    }
    //每次获取数据到缓冲区时,角标为0
    pos = 0;
    char ch = buf[pos];

    pos ++;
    count --;
    return ch;
    }else if (count > 0) {
    char ch = buf[pos];

    pos ++;
    count --;
    return ch;
    }


    */
    }
    public String myReadLine()throws IOException {

    StringBuilder sb =new StringBuilder();
    int ch = 0;
    while((ch= myRead()) != -1){
    if (ch == ' ') {
    continue;
    }
    if (ch == ' ') {
    return sb.toString();
    }
    sb.append((char)ch);
    }
    if (sb.length() != 0) {
    return sb.toString();
    }
    return null;

    }
    public void myClose() throws IOException{
    this.r.close();
    }

    }

    每一步都是一个深刻的脚印
  • 相关阅读:
    Hibernate初学
    表分区
    单列函数
    Oracle基础
    8.28
    SpringMVC
    SpringMVC 初级操作
    试题评测
    Mybatis

  • 原文地址:https://www.cnblogs.com/chzlh/p/9425961.html
Copyright © 2011-2022 走看看