IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo r囧r小猫 2022-06-14 00:36 219阅读 0赞 在之前的学习笔记([http://blog.csdn.net/megustas\_jjc/article/details/72853059][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()原理—缓冲原理 ## ![这里写图片描述][SouthEast] 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()方法也可以 } } 注:注释部分代码是逐个读取字符 [http_blog.csdn.net_megustas_jjc_article_details_72853059]: http://blog.csdn.net/megustas_jjc/article/details/72853059 [SouthEast]: /images/20220614/48752ae933fd49df90d70e4134c13a3f.png
相关 Java IO流操作:文件读写、BufferedReader/ BufferedWriter示例 在Java中,IO流主要是用来进行文件的读写操作。以下是一些常用的IO流示例: 1. 文件读写(使用`FileInputStream`和`FileOutputStream`) 小咪咪/ 2024年09月11日 06:33/ 0 赞/ 67 阅读
相关 缓冲字符流BufferedWriter、BufferedReader以及IO中的装饰者模式 > 详细介绍了Java IO中的缓冲字符流BufferedWriter、BufferedReader、LineNumberReader的使用方式,以及Java IO中的装饰者模 迷南。/ 2022年09月09日 06:18/ 0 赞/ 260 阅读
相关 IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo 在之前的学习笔记([http://blog.csdn.net/megustas\_jjc/article/details/72853059][http_blog.csdn.ne r囧r小猫/ 2022年06月14日 00:36/ 0 赞/ 220 阅读
相关 Java——BufferedReader和BufferedWriter应用实例 / 字符流的缓冲区:缓冲区是为了提高读或写的效率 只具备提高效率的功能,不具备读或者写的功能 所以使用缓冲流必须结合着读流或写流 BufferdReader:只具备提高 我会带着你远行/ 2022年06月07日 09:52/ 0 赞/ 256 阅读
相关 Java中的BufferedReader与BufferedWriter简介与使用 BufferedReader和BufferedWriter是带有默认缓冲区的字符输入输出流,其效率相较于没有缓冲区要高: 1.java.io.BufferedReader和j 分手后的思念是犯贱/ 2022年05月25日 01:41/ 0 赞/ 186 阅读
相关 IO流之BufferedWriter和BufferedReader原理研究 BufferedWriter和BufferedReader的定义 BufferedWriter “缓存字符输出流”,内置一个缓 朴灿烈づ我的快乐病毒、/ 2022年05月23日 13:52/ 0 赞/ 199 阅读
相关 JavaIO BufferedReader和BufferedWriter介绍和实例 BufferedReader和BufferedWriter简介 为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。`Buffered 雨点打透心脏的1/2处/ 2022年05月16日 20:12/ 0 赞/ 153 阅读
相关 PHP学习笔记与Demo(二) <?php / Created by PhpStorm. User: wei19 Date: 2019/1/19 Time: 14:14 / / 待我称王封你为后i/ 2022年03月25日 11:23/ 0 赞/ 221 阅读
相关 笔记 —— BufferedReader、BufferedWriter 目录 FileWriter 什么情况下使用字符流? 通过项目默认的码表一次读取一个字符 字符流是否可以拷贝非纯文本的文件 自定义字符数组拷贝 秒速五厘米/ 2022年03月22日 01:44/ 0 赞/ 217 阅读
还没有评论,来说两句吧...