2黑马币
本帖最后由 @白纸嘿字@ 于 2015-10-12 01:53 编辑
这是毕向东模拟BufferedReader写的,看后有一个问题想问一问,就是25行的“int”,能不能改成char?
- package com.itheima.io.buffer;
- import java.io.IOException;
- import java.io.Reader;
- public class MyBufferedReader {
- //持有一个流对象
- private Reader r;
- //因为是缓冲区对象,所以内部必须维护了一个数组
- private char[] buffer=new char[1024];
- //定义角标
- private int index=0;
- //定义变量,记录住数组中元素的个数
- private int count=0;
- //一初始化就必须明确被缓冲的流对象
- public MyBufferedReader(Reader r) {
- super();
- this.r = r;
- }
-
- /**
- * 读取一个字符的方法,而且是高效的
- * @throws IOException
- */
- public int myRead() throws IOException{
- if(count==0){
- //通过被缓冲的流对象的read方法,就可以将设备上的数据存储到数组中
- count=r.read(buffer);
- index=0;//执行这个操作,是不是因为index自增到最后一个了,所以这个就要把index归零
- }
- if(count<0)
- return -1;
- char ch=buffer[index];
- index++;//每取一次都要自增
- count--;//取出一个,数组的数量就要减少。一旦减到0,就再从设备上获取一批数据存储到数组中
- return ch;
- }
- /**
- * 读取一行文本
- */
- public String myReadLine() throws IOException{
- //定义临时缓冲区,用于存储一行文本
- StringBuilder sb=new StringBuilder();
- //不断地调用myRead方法从缓冲区中取出数据
- int ch=0;
- while((ch=myRead())!=-1){
- //在储存前要判断行终止符
- if(ch=='\r')
- continue;
- if(ch=='\n')
- return sb.toString();
- //对读到的字符进行临时存储
- sb.append((char)ch);
- }
- //如果文本结尾处有数据,但没有行终止符。
- //数据已读到,并存储到StringBuilder中,只要判断StringBuilder长度即可。
- if(sb.length()!=0)
- return sb.toString();
- return null;
- }
- /**
- * 定义一个缓冲区的关闭方法
- * @throws IOException
- */
- public void myClose() throws IOException{
- //其实就是在关闭被缓冲的流对象
- r.close();
- }
- }
复制代码
|
|