IO流-ReadLine方法的原理 自定义BufferedReader
2016-01-23 12:06
531 查看
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); } } }
相关文章推荐
- Python、Javascript中的闭包比较
- 使用CSLoader获取Node后再获取精灵失败
- jsp+ajax实现无刷新
- AngularJS使用ngOption实现下拉列表的实例代码
- ReactiveCocoa - iOS开发的新框架
- JSP知识体系大全
- JSP
- jQueryRegLogin弹出可拖动的登录和注册
- 【JQuery】纵向横向菜单
- jQuery Ajax的Spring后台接收数组
- IO流 Buffered 综合练习
- Extjs 组件共用(单例)问题
- js把div置灰不可用
- 在html中禁用自己主动完毕
- Extjs PROXY查询params无法传参,改用extraParams
- Extjs TabPanel 选项卡延迟加载
- JavaScript define
- "前端"碎碎念
- javascript笔记之express初体验
- iOS【ReactiveCocoa的使用(RAC的属性监听)】