/*
编写代码解释readLine的原理。
readLine本质上还是通过read方法来实现的。
*/
import java.io.*;
class MyBufferedReader
{
private Reader r;
MyBufferedReader(Reader r)
{
this.r=r;
}
public String myReadLine() throws IOException
{
//定义一个临时容器,原BufferedReader封装的是字符数组。
//为了掩饰方便,定义一个StringBuilder容器,因为最终还是要讲数据变成字符串。
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
public void myclose() throws IOException
{
r.close();
}
}
/*编码实现LineNumberReader原理*/
import java.io.*;
class MyLineNumberReader extends MyBufferedReader
{
private int lineNumber;
MyLineNumberReader(Reader r)
{
super(r);
}
public String myReadLine() throws IOException
{
lineNumber++;
return super.myReadLine();
}
public void setLineNumber(int lineNumber)
{
this.lineNumber=lineNumber;
}
public int getLineNumber()
{
return lineNumber;
}
}
class MyLineNumberReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr=new FileReader("D:\\myfile\\mycode\\1.txt");
MyLineNumberReader mlnr=new MyLineNumberReader(fr);
String line=null;
mlnr.setLineNumber(100);
while((line=mlnr.myReadLine())!=null)
{
System.out.println(mlnr.getLineNumber()+"::"+line);
}
mlnr.myclose();
}
}