模拟缓冲区方法MyBufferedReaderDemo()

/*
模拟缓冲区方法MyBufferedReaderDemo()
*/
import java.io.*;
class MyBufferedReader//自定义一个缓冲区方法MyBufferedReaderDemo()
{
    private FileReader r;
    MyBufferedReader(FileReader r)//构造器 参数用 文件读取流
    {
        this.r = r;
    }

    //可以一次读一行数据的方法 自定义
    public String myReadLine() throws IOException//谁调用异常抛给谁
    {
        /*定义一个临时容器,原BufferReader封装的是字符数组。
        为了演示方便,定义一个StringBuilder容器。因为最终还是要将数据变成字符串。
        */
        StringBuilder sb = new StringBuilder();//StringBuilder比StringBuffer效率高
        int ch = 0;
        while ((ch= r.read())!=-1)//read()方法,读取单个字符,判断非空,-1表示空 到了结尾
        {
            if(ch=='\r')//判断换行符win,则跳过
                continue;
            if(ch=='\n')//判断换行符linux,则跳过
                return sb.toString();
            else
                sb.append((char)ch);//append()添加进字符
            /*
            append() 1.先实例化
        2.类.append("字符串")  有很多重载,具体查API
        3.用途是当需要大量的字符串拼接时使用  优点效率比+=要高很多 (+=内存中是相当于创建副本重新赋值,StringBuffer是指针的引用)
        */
        }
        if (sb.length()!=0)//如果缓冲区内有数据      
            return sb.toString();//返回字符串        
        return null;
    }
    public void myClose() throws IOException//内置关闭流方法
    {
        r.close();
    }
}
class  MyBufferedReaderDemo
{
    public static void main(String[] args)  throws IOException
    {

        FileReader fr = new FileReader("C:\\buf.txt");//声明实例化一个文件读取流
        MyBufferedReader myBuf = new MyBufferedReader(fr);//实例化 自定义缓冲区 上面有定义了构造器

        String line = null;
        while ((line=myBuf.myreadLine())!=null)//自定义读取行方法 判断非空 null表示空
        {
            System.out.println(line);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值