zoukankan      html  css  js  c++  java
  • IO流-ReadLine方法的原理 自定义BufferedReader

    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=='
    '){
                    continue;
                }
                if(ch == '
    '){
                    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=='
    '){
                    continue;
                }
                if(ch == '
    '){
                    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==' '){
                    continue;
                }
                if(ch == ' '){
                    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);
            }
        }

    }

  • 相关阅读:
    白天写代码,晚上摆地摊!9年前摆地摊学会了这些道理...
    啪啪,打脸了!领导说:try-catch必须放在循环体外!
    阿里巴巴为什么让初始化集合时必须指定大小?
    永远不要使用双花括号初始化实例,否则就会OOM!
    限流的6大狠招,附详细代码和评测结果
    HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
    String性能提升10倍的几个方法!(源码+原理分析)
    9个小技巧让你的 if else看起来更优雅
    用了自定义Banner后,SpringBoot瞬间变的高大上了...
    别再问我 new 字符串创建了几个对象了!我来证明给你看!
  • 原文地址:https://www.cnblogs.com/yangyongqian/p/5153080.html
Copyright © 2011-2022 走看看