zoukankan      html  css  js  c++  java
  • Java自定义缓冲区MyBufferedReader

    package IODemo;
    
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    
    
    /**
     * 自定义的读取缓冲区。其实就是模拟一个BufferedFileReader.
     * 
     * 分析:
     * 缓冲区中无非就是封装了一个数组,
     * 并对外提供了更多的方法对数组进行访问。
     * 其实这些方法最终操作的都是数组的角标。
     * 
     * 缓冲的原理:
     * 其实就是从源中获取一批数据装进缓冲区中。
     * 在从缓冲区中不断的取出一个一个数据。
     * 
     * 在此次取完后,在从源中继续取一批数据进缓冲区。
     * 当源中的数据取光时,用-1作为结束标记。 
     * 
     * 
     * @author Administrator
     *
     */
    public class MyBufferedReader {
    
     public static void main(String args[]) 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);
      }
      bufr.myClose();
    
     }
    
     private void myClose() throws IOException {
      r.close();
     }
    
     /**
      * @param args
      */
     private FileReader r;
    
     // 自定义缓冲区,需要关联一个被缓冲的对象,所以在构造函数中传入一个FileReader对象
     public MyBufferedReader(FileReader r) {
      this.r = r;
     }
    
     // 定义指针标记,用于操作缓冲数组中的元素,指针不断后移,当操作到最后一个元素后,指针应该归零。
     private int pos = 0;
     private char[] buf = new char[1024];
     // 定义计数器,用于统计缓冲区中的元素个数,当该数为0时,继续从源取数据到缓冲区中
     private int count = 0;
        //此处犯了一个错误,else-if和多个if的区别没有搞清楚
     /*
      * if(a){
      * b;
      * }
      * if(c){
      * d;
      * }
      * a,c两个条件都会判断,但如果第二个换成else-if则第一个满足以后,就不会判断第二个
      */
     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 == '
    ') {
        continue;
       }
       if (ch == '
    ') {
        return sb.toString();
       }
       sb.append((char) ch);
      }
      // 这一步是为了保证将缓冲区中的数据全部读出,以免源中最后以后没有'
    '换行结束符号
      // 但是数据已经读入到缓冲区中,保证数据的完整性,以免遗漏数据。
      if (sb.length() != 0) {
       return sb.toString();
      }
    
      return null;
     }
    
    }
  • 相关阅读:
    Sharepoint 2007 Forms认证与File Not Found错误
    完全控制SharePoint站点菜单(Get full control of SharePoint ActionMenus) Part 1
    从WSS 3.0到MOSS 2007
    如何备份sharepoint中的文档库?
    图片与文本的对齐方式
    backgroundimage 背景图片的设置
    css中三种隐藏方式
    font(字体)所使用的属性
    display属性
    margin中的bug解决方法
  • 原文地址:https://www.cnblogs.com/ysw-go/p/5283005.html
Copyright © 2011-2022 走看看