IO流-ReadLine方法的原理 自定义BufferedReader

时间:2021-10-25 21:36:44
package com.yyq;
/*
 * readLine 方法的原理
 * 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是
 * read方法一次读一个的发法
 * 缓冲区:带数组的内存 readline 底层用的是read方法
 *readline 使用一个数组把数据临时存储起来了,档遇到换行时把数据返回出来
 */
/*
 * 明白了BufferedReader 类中特有的方法readline
 * 可以自定义一个类包含功能myreadline 来模拟bufferedreader、
 * 自己定义一个自己的myBufferedReader
 */
import java.io.*;
class MyBufferedReader{
    // 可以一次读取一行的方法
    FileReader fr = null;
    MyBufferedReader(FileReader fr){
        this.fr = fr;
    }
    public String myReadLine() throws IOException{
        //定义一个临时容器,源bufferedReader 封装的是字符数组
        //为了演示方便,定义StringBuilder 容器,最终将数据变成字符串
        StringBuilder sb = new StringBuilder();
        int ch = 0;
        while((ch=fr.read())!=-1){
            if(ch=='\r'){
                continue;
            }
            if(ch == '\n'){
                return sb.toString();
            }
            sb.append((char)ch);
        }
        // 保证只有有数据就可以读出来,该部分最多执行一次
        if(sb.length()!=0){
            return sb.toString();
        }
        return null;
    }
    public void myclose(){
        try{
            fr.close();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
}
public class ReadLineDemo {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        MyBufferedReader mybufr = new MyBufferedReader(new FileReader("1.txt"));
        String line = null;
        while((line = mybufr.myReadLine())!=null){
            System.out.println(line);
        }
    }

}
package com.yyq;
/*
 * readLine 方法的原理
 * 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是
 * read方法一次读一个的发法
 * 缓冲区:带数组的内存 readline 底层用的是read方法
 *readline 使用一个数组把数据临时存储起来了,档遇到换行时把数据返回出来
 */
/*
 * 明白了BufferedReader 类中特有的方法readline
 * 可以自定义一个类包含功能myreadline 来模拟bufferedreader、
 * 自己定义一个自己的myBufferedReader
 */
import java.io.*;
class MyBufferedReader{
    // 可以一次读取一行的方法
    FileReader fr = null;
    MyBufferedReader(FileReader fr){
        this.fr = fr;
    }
    public String myReadLine() throws IOException{
        //定义一个临时容器,源bufferedReader 封装的是字符数组
        //为了演示方便,定义StringBuilder 容器,最终将数据变成字符串
        StringBuilder sb = new StringBuilder();
        int ch = 0;
        while((ch=fr.read())!=-1){
            if(ch=='\r'){
                continue;
            }
            if(ch == '\n'){
                return sb.toString();
            }
            sb.append((char)ch);
        }
        // 保证只有有数据就可以读出来,该部分最多执行一次
        if(sb.length()!=0){
            return sb.toString();
        }
        return null;
    }
    public void myclose(){
        try{
            fr.close();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
}
public class ReadLineDemo {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        MyBufferedReader mybufr = new MyBufferedReader(new FileReader("1.txt"));
        String line = null;
        while((line = mybufr.myReadLine())!=null){
            System.out.println(line);
        }
    }

}

 

package com.yyq;
/*
 * readLine 方法的原理
 * 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是
 * read方法一次读一个的发法
 * 缓冲区:带数组的内存 readline 底层用的是read方法
 *readline 使用一个数组把数据临时存储起来了,档遇到换行时把数据返回出来
 */
/*
 * 明白了BufferedReader 类中特有的方法readline
 * 可以自定义一个类包含功能myreadline 来模拟bufferedreader、
 * 自己定义一个自己的myBufferedReader
 */
import java.io.*;
class MyBufferedReader{
    // 可以一次读取一行的方法
    FileReader fr = null;
    MyBufferedReader(FileReader fr){
        this.fr = fr;
    }
    public String myReadLine() throws IOException{
        //定义一个临时容器,源bufferedReader 封装的是字符数组
        //为了演示方便,定义StringBuilder 容器,最终将数据变成字符串
        StringBuilder sb = new StringBuilder();
        int ch = 0;
        while((ch=fr.read())!=-1){
            if(ch=='\r'){
                continue;
            }
            if(ch == '\n'){
                return sb.toString();
            }
            sb.append((char)ch);
        }
        // 保证只有有数据就可以读出来,该部分最多执行一次
        if(sb.length()!=0){
            return sb.toString();
        }
        return null;
    }
    public void myclose(){
        try{
            fr.close();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
}
public class ReadLineDemo {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        MyBufferedReader mybufr = new MyBufferedReader(new FileReader("1.txt"));
        String line = null;
        while((line = mybufr.myReadLine())!=null){
            System.out.println(line);
        }
    }

}