Java IO流之缓冲流:字节缓冲流BufferedOutputStream BufferedInputStream、字符缓冲流BufferedWriter、BufferedReader
文章目录
- 缓冲流
- 1、字节缓冲流
- 构造方法
- 2、字符缓冲流
- 构造方法
- 练习:文章段落排序
缓冲流
缓冲流在基础的字节流和字符流上做功能的增强,能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化。
缓冲流也称高效流,是对四个基本的Filexxx
流的增强,可分:
- 字节缓冲流:
BufferedOutputStream
、BufferedInputStream
- 字符缓冲流:
BufferedWriter
、BufferedReader
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区的读写,将所有读取的数据存入数组中,然后一次性返回进行数据处理(读写原理一样),减少系统的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相关推荐
- 【java基础,IO合集】文件流、高级流(缓冲流、对象流)、 序列化接口java.io.Serrializable
目录 文件流 1 块读写的文件复制操作 2 文件输出流-覆盖模式 3 文件输出流-追加模式 4 文件输出流-读取文本数据 高级流 1 流连接示意图 2 缓冲流 2.1 使用缓冲流完成文件复制操作 2 ...
- java IO流之缓冲流详解
缓冲流概述 缓冲流也称为高效流或者高级流.之前我们学习的字节流.字符流可以成为基本流. 作用:缓冲流自带缓冲区.可以提高基本字节流.字符流读写数据的性能. 分类: BufferedInputStrea ...
- 第十五章 IO流(转换流 字符流 字符缓冲流 打印流)
Java基础15 第十五章 IO流(转换流 字符流 字符缓冲流 打印流) 15.1 字符编码和字符集 15.1.1 字符编码 15.1.2 字符集 15.1.3 String类getBytes()方法 ...
- Java——字符缓冲流练习之集合到文件、文件到集合、点名器
Java--字符缓冲流练习之集合到文件.文件到集合.点名器 一.集合到文件(集合中的数据是字符串) 二.集合到文件(集合中的数据是学生对象) 三.集合到文件(数据排序) 四.文件到集合(文件中的数据是 ...
- Java语言之字符缓冲流
一,字符缓冲输出流BufferedWriter java.io.BufferedWriter extends Writer. BufferedWriter:字符缓冲输出流,提高字符写入效率. 继承父类 ...
- [Java基础]字符缓冲流
代码如下: package CopyJavaPack01;import java.io.BufferedWriter; import java.io.FileWriter; import java.i ...
- Java IO: 流
转载自 Java IO: 流 原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Java IO流是既可以从中读取,也可以写入到其中的数据流. ...
- Java基础17:Java IO流总结
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80201802 这位大侠,这是我的公众号:程序员江湖 ...
- Java IO流之PrintStream分析
简介 PrintStream继承了FilterOutputStream.是"装饰类"的一种,所以属于字节流体系中(与PrintStream相似的流PrintWriter继承于Wri ...
最新文章
- python安装pyqt5 qml_PyQt5:PyQt5程序打包2
- Struts2 注解中跳转 action
- 基于倒谱法、自相关法、短时幅度差法的基音频率估计算法(MATLAB及验证)
- 再见 Xshell!这个开源的终端工具更酷炫!
- python实现指纹识别毕业论文_指纹识别系统大学本科毕业论文
- linux 怎么设置静态ip,如何在Linux中设置静态IP地址和配置网络
- Bootstrap 分页导航的对齐方式
- hibernate将本地SQL查询结果封装成对象
- yum命令报错 yum update File /usr/bin/yum, line 30 except KeyboardInterrupt, e: --CentOS7.5
- docker 容器安装conposer_docker和composer安装
- GTX1060 Windows7/Windows8/Windows8.1 旧版显卡驱动下载链接
- windows写注册表文件脚本的编写
- 墨羽卿画第二章第5节:另一个世界,腊月廿四
- android+实现微信对话框样式,实现微信对话框的图片样式以及图片边框
- VMware虚拟机vmx文件丢失
- 极客时间和极客学院_极客需要告诉我们的父母有关安全可靠地在线购物的信息
- 数据库忘记密码(重置用户密码方法教程)
- 计算机应用格式工厂部分教案,格式工厂教学案.doc
- ak sk认证java demo_AK-SK鉴权
- 通过PS把月亮装进灯泡里打造创意灯泡月亮
热门文章
- ai数字人无限播是什么?数字人直播带货如何搭建?操作教程及注意事项分享
- Python数据可视化工具matplotlib(八)-- 表格
- matlab:使用4阶龙格库塔方法求微分方程组的值
- pip._vendor.pkg_resources.VersionConflict: (pip 20.3.4 (/home/wsy/.local/lib/python3.5/site-packages
- vscode设置获得管理员权限
- Java第20天——二叉树的深度遍历的递归实现
- html css做骰子,纯 CSS 制作摇骰子(随机结果)
- TypeScript-Int64实现
- 基于AT89C51单片机的无级调光系统的实现
- JavaScript的一些下拉列表框用法