package Demo;
import java.io.*;
import java.util.*;
public class MyBufferedReaderTest {
/**
* BufferdReader 的原理
* 重写这个方法的主要功能
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileReader fr = null;
MyLineBufferedReader mbr=null;
try {
fr = new FileReader("D:\\b.ini");
mbr = new MyLineBufferedReader(fr);
String line = null;
mbr.setLineNum(100);
while ((line=mbr.MyReadLine()) != null)
{
System.out.println(mbr.getLineNum()+":"+line);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
new RuntimeException(e.getMessage());
}
finally
{
try {
mbr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyBufferedReader extends Reader
{
private Reader fr;
MyBufferedReader(Reader fr)
{
this.fr = fr;
}
public String MyReadLine() throws IOException
{
StringBuilder sb = new StringBuilder();
int line = 0;
while ((line=fr.read()) != -1)
{
if (line == '\r')
{
continue;
}
if (line == '\n')
{
return sb.toString();
}
else
{
sb.append((char)line);
}
}
if (sb.length() != 0)
sb.toString();
return null;
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
return fr.read(cbuf, off, len);
}
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
fr.close();
}
}
//带行号的缓冲
class MyLineBufferedReader extends MyBufferedReader
{
private Reader fr;
private int lineNum=0;
MyLineBufferedReader(Reader fr)
{
super(fr);
}
public String MyReadLine() throws IOException
{
lineNum++;
return super.MyReadLine();
}
public final int getLineNum() {
return lineNum;
}
public final void setLineNum(int lineNum) {
this.lineNum = lineNum;
}
}