/*
模拟缓冲区方法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);
}
}
}
模拟缓冲区方法MyBufferedReaderDemo()
最新推荐文章于 2020-11-06 01:15:04 发布