IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
来源:互联网 发布:淘宝网 雪嫦娥多肉植物 编辑:程序博客网 时间:2024/06/05 18:46
在之前的学习笔记(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter与FileReader的Demo使用的中转数据buf实际就是缓冲区,是由我们自己创建的。
缓冲区可以提高效率,Java对缓冲区进行了封装,封装成了对象,即读与写操作都进行了缓冲:
BufferedWriter
BufferedReader
缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强
为什么会提高效率(同数据库连接池,避免每次的创建连接和断开连接,直接创建一个容器,使用完放回即可):
常规的读一次写一次的方式,磁头需要进行不断的切换
缓冲的方式,每次读取一块便在内存中存储一块,一旦装满了或者没有数据可以继续读取了,就开始写操作
代码:设计优化(重构);性能优化(最常见的手段之一就是缓冲区)
BufferdeWriter
public class BufferdeWriter extends Writer:
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
常用方法
本质:用数组在缓冲存流中的数据,因此缓冲区在被创建时,必须要有被缓存的对象
BufferedWriter(Writer out):创建一个使用默认大小输出缓冲区的缓冲字符输出流
BufferedWriter(Writer out,int sz):创建一个使用给定大小输出缓冲区的缓冲字符输出流
close():关闭此流,但要先刷新它
flush():刷新该流的缓冲
newLine():写入一个分隔符,实际就是将System.getProperty(“line.separator”)进行了封装
write(char[] cbuf,int off,int len):写入字符数组的某一部分
write(char c):写入单个字符
write(String s,int off,int len):写入字符串的某一部分
Demo
public class BufferedWriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("buf.txt"); //为提高写入的效率,使用字符流的缓冲区,创建一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联 BufferedWriter bufw = new BufferedWriter(fw); //使用缓冲区的写入方法将数据先写入缓冲区中 bufw.write("abcdef"); bufw.newLine(); bufw.write("hahah"); //使用缓冲区的刷新方法将数据刷到目的地中 bufw.flush(); //关闭缓冲区,缓冲区没有调用系统底层资源,真正调用底层资源的是FileWriter对象,缓冲区仅仅是一个提高效率的作用 //因此,此处的close()方法关闭的是被缓存的流对象 bufw.close(); }}
BufferedReader
public BufferedReader extends Reader:
从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行(文本的行数通过回车符来进行判定)的高效读取
常用方法
注意:缓冲区对象(例如BufferedWriter)操作的都是缓冲区中的内容,内容从外设到内存是由底层流对象完成的(例如Writer),具体将在如下介绍
read():读取单个字符
read(char[] cbuf,int off,int len):将字符读入数组的某一部分
readLine():读取一个文本行,通过下列字符之一即可认为某行已终止,换行(‘\n’),回车(‘\r’)或回车后直接跟着换行
返回:包含该行内容的字符串,不包含任何终止符,如果已经到达流末尾,则返回null
Demo
public class BufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); String line = null; while ((line=bufr.readLine())!=null){ System.out.println(line); } }}
readLine()原理—缓冲原理
bufr.read(buf)是建立缓冲区时调用的方法,因此虽然BufferedReader的read()方法是读取单个字符,但是也是从缓冲区读取,已经是高效方法了。
readLine()方法,在读到一个数据之后不进行操作,而是继续进行缓冲并判断结束标记,详细可以参加图示注释。
实现复制文本文件
public class Copy { //复制文本文件 public static void main(String[] args) throws IOException { FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); FileWriter fw = new FileWriter("buf_copy.txt"); BufferedWriter bufw = new BufferedWriter(fw);// int ch = 0;// //下面的read()方法是从缓冲区中读// while ((ch=bufr.read())!=-1){// bufw.write(ch);//往缓冲区中写,是直接操作内存的,速度相对于快一些// }// bufw.close();// bufr.close(); //按行读取,例如判断一行中是否有某些关键字,读取一行的方式比较方便,如果单纯复制操作,一个个读和按行读取皆可 String line = null; while ((line=bufr.readLine())!=null){ bufw.write(line); } bufw.close(); bufr.close();//不使用close()方法,在每次bufw.write(line)操作后调用flush()方法也可以 }}
注:注释部分代码是逐个读取字符
- IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
- java学习笔记之BufferedReader与BufferedWriter
- Java之IO(二)FileReader、FileWriter、BufferedReader、BufferedWriter
- java学习之文件IO流,BufferedReader/BufferedWriter学习
- Java IO 流的学习之 BufferedReader/BufferedWriter
- java Io 缓冲流 BufferedReader BufferedWriter 笔记
- Java笔记 - IO流(BufferedWriter,BufferedReader)
- Java IO笔记(BufferedReader/BufferedWriter)
- Java基础知识IO流(BufferedWriter&BufferedReader)
- 字符流学习笔记及总结(FileWriter、FileReader、BufferedWriter、BufferedReader)
- IO流二:IO流之缓冲区BufferedReader、BufferedWriter、装饰设计模式、LineNumberReader
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
- java基础之IO流中的BufferedReader和BufferedWriter
- java核心技术之IO流(五)BufferedReader和BufferedWriter
- 黑马程序员---IO流(字符流缓冲区BufferedWriter、BufferedReader)
- 黑马程序员——IO流(BufferedWriter和BufferedReader)
- IO流--字符流缓冲区(BufferedReader,BufferedWriter)
- IO流——BufferedWriter和BufferedReader
- 关于专人整理和分析需求
- MYSQL 优化常用方法
- 关于cocos tableView的数据刷新后位置不变
- linux之awk用法
- 尝试博客第一篇
- IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
- Java 计算器
- 把oracle数据库所在电脑 备份的dmp文件,在dos命令利用CURL命令直接发HTTP请求上传到应用服务器
- 蓄水池抽样
- MongoDB数据库的安装与使用
- LeetCode之路:100. Same Tree
- Java Pattern 四种常用用法
- Mybatis学习
- 数据结构中的各种树浅谈