黑马程序员_学习笔记BufferedReader类的原理
来源:互联网 发布:windows还原更改要多久 编辑:程序博客网 时间:2024/05/22 08:10
------Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------
为了增加程序的效率,通常对于字节流,会创建byte数组进行字节缓存,对与字符流会使用char数组进行缓存。读取数据时对于文本文件读取操作时可以按照行分隔符进行分割。
对于行分隔符,则又存在平台相关性,不同平台对行分割符定义不同。可以使用jdk提供的File类的separator。
BufferedReader包装了FileReader类,可以在此基础上自己实现BufferedReader的功能。
// 定义MyBufferedReader,实现与BufferedReader,相同的功能class MyBufferedReader { // 包装FileReader private FileReader r; // 定义构造器,传入FileReader对象 publicMyBufferedReader(FileReader r) { this.r = r; } // 模拟readline();实现读取一行的方法 public String myReadLine() throws IOException { // 创建StringBuild对象,StringBuild的底层是数组的实现 // 可通过append()追加数据 StringBuildersb = new StringBuilder(); // 将读取的字符保存到ch int ch = 0; while ((ch = r.read()) != -1) { // 如过读到'\r',忽略 if (ch == '\r') continue; // 读到'\n',说明到了行结尾,输出已读到的数据 if (ch == '\n') return sb.toString(); // 读到的不是'\r'或'\n',则添加到可变字符串 sb.append((char) ch); } // 当上面的代码读取文本结尾没有'\n'字符的文本时,会忽略最后一行 // 此处添加对容器的判断,如果StringBuild非空,则也添加到sb // 保证文本最后一行即使没有换行也能输出。 if (sb.length() != 0) return sb.toString(); // 如果文本为空,则返回null return null; }} //再创建一个测试类,测试MyBufferedReaderpublic classMyBufferedReaderDemo { public static void main(String[] args) throws IOException { MyBufferedReadermbr= newMyBufferedReader(newFileReader("buf.txt")); Strings = null; while ((s = mbr.myReadLine()) != null) System.out.println(s); }}
总结以上代码:即jdk提供的BufferedReader是对FileReader的包装,免去自己读取文本时自己创建缓冲字符数组。
本例是基于StringBuild创建的缓冲区,实现了读一行的方法。
BufferedReader的构造方法有两个:
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
第二个构造方法中的第一个参数指定字符输入流,第二个参数指定缓冲区大小。通常使用默认的缓冲区大小。
------Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------
0 0
- 黑马程序员_学习笔记BufferedReader类的原理
- 黑马程序员--IOS_学习笔记_类的本质
- 黑马程序员_学习笔记String类
- 黑马程序员_<<字符流的缓冲技术和装饰类(BufferedWriter,BufferedReader,LineNumberReader)>>
- 黑马程序员-78-BufferedReader类
- 黑马程序员_抽象类的学习
- 黑马程序员_类的学习
- 黑马程序员_学习笔记6注解的总结
- 黑马程序员_学习笔记三 字符串的常用方法
- 黑马程序员_对于Java高新技术的学习笔记
- 黑马程序员_面对对象的编程学习笔记
- 黑马程序员_多线程的创建和运行机制学习笔记
- 黑马程序员_多线程的线程间通信学习笔记
- 黑马程序员_学习笔记文件的分割和合并
- 黑马程序员_Java基础_我的day01学习笔记
- 黑马程序员_Java基础_我的day02学习笔记
- 黑马程序员_Java基础_我的day03学习笔记
- 黑马程序员_Java基础_我的Day05学习笔记
- 面试:机器学习--贝叶斯
- 快速排序
- ASP.NET MVC加载ASCX后并获取其内控件值或赋值
- hdoj 2817 A sequence of numbers(快速幂取模)
- Windows Phone Runtime 8.1 按返回键彻底关闭App -- 重新定义硬件返回键的事件
- 黑马程序员_学习笔记BufferedReader类的原理
- 面试:机器学习--决策树
- Android的Adapter用法总结
- 6.4.5 final方法
- HPL formica plywood,BS1088 marine plywood,H timber beam
- hdu 产生冠军(充分理解题意)
- window下oralce10G使用dblink连接到mysql
- 用java写的一个简易记事本
- 内置视图-滚动视图