文章目录

  • 缓冲流
    • 1、字节缓冲流
      • 构造方法
    • 2、字符缓冲流
      • 构造方法
    • 练习:文章段落排序

缓冲流

缓冲流在基础的字节流和字符流上做功能的增强,能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化。

缓冲流也称高效流,是对四个基本的Filexxx流的增强,可分:

  • 字节缓冲流BufferedOutputStreamBufferedInputStream
  • 字符缓冲流BufferedWriterBufferedReader

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区的读写,将所有读取的数据存入数组中,然后一次性返回进行数据处理(读写原理一样),减少系统的IO次数,从而提高读写的效率。

1、字节缓冲流

构造方法

  • public BufferedInputStream(InputStream in) 创建一个新的缓冲输入流,系统默认缓冲区大小
  • public BufferedInputStream(InputStream in,int size) 创建一个新的缓冲输入流,指定一个缓冲区大小
  • public BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,系统默认缓冲区大小
  • public BufferedOutputStream(OutputStream out,int size) 创建一个新的缓冲输出流,指定一个缓冲区大小
public class BufferedStreamTest {public static void main(String[] args) throws IOException{bufferedStream();}public static void bufferedStream() throws IOException {// 字节输入流FileInputStream fileInputStream = new FileInputStream("a.txt");// 字节输出流FileOutputStream fileOutputStream = new FileOutputStream("b.txt");// 定义一个字节输入流的缓冲流BufferedInputStream bufferedIn = new BufferedInputStream(fileInputStream);// 定义一个字节输出流的缓冲流BufferedOutputStream bufferedOut = new BufferedOutputStream(fileOutputStream);// 缓冲流读取,然后缓冲流写出byte[] bytes = new byte[1024];int read = 0;while ((read = bufferedIn.read(bytes)) != -1){bufferedOut.write(bytes, 0 , read); // 写入有效数据}bufferedOut.close();bufferedIn.close();}
}// 注意:
// 字节流可以读取含中文的文件,但不能对读取出来的字节进行操作,不然会因为编码不同而出现乱码现象。通过字节流直接读取然后直接写入到另一个文件中,是没有问题的。
//如:将a.txt文件含中文的内容,读取到内存,再直接写入到b.txt中,是没有问题的。

2、字符缓冲流

构造方法

  • public BufferedReader(Reader in) 创建一个新的缓冲输入流,系统默认缓冲区大小
  • public BufferedReader(Reader in,int size) 创建一个新的缓冲输入流,指定一个缓冲区大小
  • public String readLine() throws IOException 按每行读取,以终止符结束(换行符’\r’ 回车符’\n’ 换行回车符’\r\n’),终止符不会被读入。如果全部已读完,返回null。
  • public BufferedWriter(Writer out) 创建一个新的缓冲输出流,系统默认缓冲区大小
  • public BufferedWriter(Writer out,int size) 创建一个新的缓冲输出流,指定一个缓冲区大小
  • public void newLine() 该方法可根据操作系统写入一个符合该操作系统的换行符,是BufferedWriter类特有的方法
public class BufferedChTest {public static void main(String[] args) throws IOException {bufferedCh();}public static void bufferedCh() throws IOException {// 创建一个字符读取流FileReader fileReader = new FileReader("a.txt");// 创建一个字符写出流FileWriter fileWriter = new FileWriter("c.txt",true);// 定义一个字符读取缓冲流BufferedReader bufferedRe = new BufferedReader(fileReader);// 定义一个字符写出缓冲流BufferedWriter bufferedWr = new BufferedWriter(fileWriter);// 读取并写到另一个文件操作char[] ch = new char[1024];int len = 0;// bufferedWr.newLine(); 向文件写入一个换行while ((len = bufferedRe.read(ch)) != -1){bufferedWr.write(ch,0, len);bufferedWr.flush();}bufferedWr.close();bufferedRe.close();}
}

练习:文章段落排序

3.夫人之相与,俯仰一世。或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。虽趣舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,不知老之将至;及其所之既倦,情随事迁,感慨系之矣。向之所欣,俯仰之间,已为陈迹,犹不能不以之兴怀,况修短随化,终期于尽!古人云:“死生亦大矣。”岂不痛哉!
1.永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭,修禊事也。群贤毕至,少长咸集。此地有崇山峻岭,茂林修竹,又有清流激湍,映带左右,引以为流觞曲水,列坐其次。虽无丝竹管弦之盛,一觞一咏,亦足以畅叙幽情。
4.每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔,悲夫!故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。后之览者,亦将有感于斯文。
2.是日也,天朗气清,惠风和畅。仰观宇宙之大,俯察品类之盛,所以游目骋怀,足以极视听之娱,信可乐也。

将乱序的《兰亭集序》文章进行排序。

// 读取文章的每一个段落,一个段落就是一行
// 将该行的数字和内容以符号'.'进行分割
// 存储到HashMap中,key为段落号,value为段落内容
// 按照顺序从hashMap中取出,然后写入到文件中
public class ParagraphSort {public static void main(String[] args) throws IOException {sort();}public static void sort() throws IOException{FileReader fileReader = new FileReader("c.txt");BufferedReader bufferedRe = new BufferedReader(fileReader);FileWriter fileWriter = new FileWriter("d.txt");BufferedWriter bufferedWr = new BufferedWriter(fileWriter);HashMap<String,String> hashMap = new HashMap<>();String content;while ((content = bufferedRe.readLine()) != null){String[] split = content.split("\\."); // . 为特殊符号所以要防止转义hashMap.put(split[0],split[1]);}for (int i = 1; i <= hashMap.size(); i++) {String key = String.valueOf(i);String value = hashMap.get(key);bufferedWr.write(key+"."+value);bufferedWr.newLine(); // 因为没有读取换行符,所以就需要写入一个换行}bufferedWr.close();bufferedRe.close();}
}

Java IO流之缓冲流:字节缓冲流BufferedOutputStream BufferedInputStream、字符缓冲流BufferedWriter、BufferedReader相关推荐

  1. 【java基础,IO合集】文件流、高级流(缓冲流、对象流)、 序列化接口java.io.Serrializable

    目录 文件流 1 块读写的文件复制操作 2 文件输出流-覆盖模式 3 文件输出流-追加模式 4 文件输出流-读取文本数据 高级流 1  流连接示意图 2 缓冲流 2.1 使用缓冲流完成文件复制操作 2 ...

  2. java IO流之缓冲流详解

    缓冲流概述 缓冲流也称为高效流或者高级流.之前我们学习的字节流.字符流可以成为基本流. 作用:缓冲流自带缓冲区.可以提高基本字节流.字符流读写数据的性能. 分类: BufferedInputStrea ...

  3. 第十五章 IO流(转换流 字符流 字符缓冲流 打印流)

    Java基础15 第十五章 IO流(转换流 字符流 字符缓冲流 打印流) 15.1 字符编码和字符集 15.1.1 字符编码 15.1.2 字符集 15.1.3 String类getBytes()方法 ...

  4. Java——字符缓冲流练习之集合到文件、文件到集合、点名器

    Java--字符缓冲流练习之集合到文件.文件到集合.点名器 一.集合到文件(集合中的数据是字符串) 二.集合到文件(集合中的数据是学生对象) 三.集合到文件(数据排序) 四.文件到集合(文件中的数据是 ...

  5. Java语言之字符缓冲流

    一,字符缓冲输出流BufferedWriter java.io.BufferedWriter extends Writer. BufferedWriter:字符缓冲输出流,提高字符写入效率. 继承父类 ...

  6. [Java基础]字符缓冲流

    代码如下: package CopyJavaPack01;import java.io.BufferedWriter; import java.io.FileWriter; import java.i ...

  7. Java IO: 流

    转载自  Java IO: 流 原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Java IO流是既可以从中读取,也可以写入到其中的数据流. ...

  8. Java基础17:Java IO流总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80201802 这位大侠,这是我的公众号:程序员江湖 ...

  9. Java IO流之PrintStream分析

    简介 PrintStream继承了FilterOutputStream.是"装饰类"的一种,所以属于字节流体系中(与PrintStream相似的流PrintWriter继承于Wri ...

最新文章

  1. python安装pyqt5 qml_PyQt5:PyQt5程序打包2
  2. Struts2 注解中跳转 action
  3. 基于倒谱法、自相关法、短时幅度差法的基音频率估计算法(MATLAB及验证)
  4. 再见 Xshell!这个开源的终端工具更酷炫!
  5. python实现指纹识别毕业论文_指纹识别系统大学本科毕业论文
  6. linux 怎么设置静态ip,如何在Linux中设置静态IP地址和配置网络
  7. Bootstrap 分页导航的对齐方式
  8. hibernate将本地SQL查询结果封装成对象
  9. yum命令报错 yum update File /usr/bin/yum, line 30 except KeyboardInterrupt, e: --CentOS7.5
  10. docker 容器安装conposer_docker和composer安装
  11. GTX1060 Windows7/Windows8/Windows8.1 旧版显卡驱动下载链接
  12. windows写注册表文件脚本的编写
  13. 墨羽卿画第二章第5节:另一个世界,腊月廿四
  14. android+实现微信对话框样式,实现微信对话框的图片样式以及图片边框
  15. VMware虚拟机vmx文件丢失
  16. 极客时间和极客学院_极客需要告诉我们的父母有关安全可靠地在线购物的信息
  17. 数据库忘记密码(重置用户密码方法教程)
  18. 计算机应用格式工厂部分教案,格式工厂教学案.doc
  19. ak sk认证java demo_AK-SK鉴权
  20. 通过PS把月亮装进灯泡里打造创意灯泡月亮

热门文章

  1. ai数字人无限播是什么?数字人直播带货如何搭建?操作教程及注意事项分享
  2. Python数据可视化工具matplotlib(八)-- 表格
  3. matlab:使用4阶龙格库塔方法求微分方程组的值
  4. pip._vendor.pkg_resources.VersionConflict: (pip 20.3.4 (/home/wsy/.local/lib/python3.5/site-packages
  5. vscode设置获得管理员权限
  6. Java第20天——二叉树的深度遍历的递归实现
  7. html css做骰子,纯 CSS 制作摇骰子(随机结果)
  8. TypeScript-Int64实现
  9. 基于AT89C51单片机的无级调光系统的实现
  10. JavaScript的一些下拉列表框用法