Java IO(十八) BufferedReader 和 BufferedWriter
Java IO(十八) BufferedReader 和 BufferedWriter
一、介绍
BufferedReader 和 BufferedWriter 是字符缓冲流,分别继承自 Reader 和 Writer,它们与字节缓冲流 BufferedInputStream 和 BufferedOutputStream 类似,都是为其他基础流添加缓冲功能。
- BufferedReader:字符缓冲输入流,它继承于Reader,为其他字符输入流添加一些缓冲功能,以提供单个字符,数组和字符串的高效写入。
- BufferedWriter:字符缓冲输出流,它继承于Writer,为其他祖父输出流添加一些缓冲功能。以提供字符,数组和行的高效读取。
二、构造方法
(一)、BufferedReader
(二)、BufferedWriter
三、常用API
(一)、BufferedReader
(二)、BufferedWriter
四、缓冲功能
(一)、BufferedWriter
BufferedWriter为其它输出流提供缓冲功能。创建 BufferedWriter 时,我们会通过它的构造函数指定某个输出流为参数。通过字符数组来缓冲数据,当缓冲区满或者用户调用 flush() 函数时,它就会将缓冲区的数据写入到输出流中。
(二)、BufferedReader
BufferedReader 的作用是为其它输入流提供缓冲功能。创建 BufferedReader 时,我们会通过它的构造函数指定某个输入流为参数。BufferedReader 会将该输入流数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从输入流中读取下一部分的数据。缓冲中的数据实际上是保存在内存中,从内存中读取数据的速度更快从而提高性能。
分批读取而不一次性读取的好处:
- 缩短读取时间,提高读取性能。
- 减少内存空间占用。
五、实例
private static char[] chs = new char[]
{'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z'};
public static void main(String[] args) {
write();
read();
} /**
* BufferedWriter 测试
*/
public static void write() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("buff.txt"));
bw.write(chs);// 写入字符数组
bw.write("\n");
String str = String.valueOf(chs);// 将字符数组转成String
bw.write(str.toUpperCase());// 将小写字母变成大写字母
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (bw != null)
bw.close();
}catch (Exception e) {
e.printStackTrace();
}
}
} /**
* BufferedReader 测试
*/
public static void read() {
BufferedReader br = null;
char[] ch = new char[10];
try {
br = new BufferedReader(new FileReader("buff.txt"));
System.out.println("read : " + (char)br.read());// 读取一个字符,将int转成char
int len = br.read(ch);
System.out.println("ch : " + new String(ch));// 将读取字符数组转成String
if (!br.markSupported()) {// 若该字符流不支持标记功能,则直接退出
System.out.println("Stream not marked");
return;
}
br.mark(1024);// 标记当前位置
br.skip(24);// 跳过24个字符
System.out.println("line : " + br.readLine());// 读取该行剩余数据
br.reset();// 重置输入流到mark标记的位置
len = br.read(ch, 0, 5); // 从0位置开始读取,读取长度为5
System.out.println("read(ch, 0, 5) : " + new String(ch,0,len));
System.out.println("line : " + br.readLine());
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if (br != null)
br.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
Java IO(十八) BufferedReader 和 BufferedWriter的更多相关文章
- 《java面试十八式》--引子
爪哇城中 “喂,你等等我啊”少女气喘吁吁的喊道 “大小姐,你可快点吧,报名马上就要结束了.” 这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...
- Java IO(八) PipedInputStream 和 PipedOutputStream
Java IO(八) PipedInputStream 和 PipedOutputStream 一.介绍 PipedInputStream 和 PipedOutputStream 是管道输入流和管道输 ...
- 系统学习 Java IO (十四)----字符读写缓存和回退 BufferedReader/BufferedWriter & PushbackReader
目录:系统学习 Java IO---- 目录,概览 BufferedReader BufferedReader 类构造器接收一个 Reader 对象,为 Reader 实例提供缓冲. 缓冲可以加快 I ...
- Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStrea ...
- Java IO--字符流--BufferedReader和BufferedWriter
从昨天开始没事情干时,决定梳理梳理Java IO流,因为觉得太混乱这个东西,妈的,咋就这么多类型,想累死谁啊,这里并不是埋怨创造者,而是气自己看着看着老跑偏,实在看不进去,太多了,想睡觉,所以现在决定 ...
- 系统学习 Java IO (十六)----这么多类,应该用哪个?
目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...
- JAVA提高十八:Vector&Stack深入分析
前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈. 什么是栈呢,我们先看一个例子:栈就相当于一个很窄的木桶,我们往木桶里放东西,往外拿东 ...
- java基础(十八)----- java动态代理原理源码解析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...
- 系统学习 Java IO (十二)----数据流和对象流
目录:系统学习 Java IO---- 目录,概览 DataInputStream/DataOutputStream 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型. 要想使用 ...
- 黑马程序员 Java基础<十八>---> 网路编程
--------------- ASP.Net+Android+IO开发S..Net培训.期待与您交流! --------------- 第一 概述 一.概述: 1.网络模型:OSI参考模型和TCP ...
随机推荐
- Java——深入理解Java异常体系
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基 ...
- mybatis的关系映射
一.多对一的映射关系 举例:根据员工编号查询员工所在部门的部门信息 第一步,需要在多的一方也就是员工实体类中持有一的一方部门实体类的引用 第二步,在dao接口中声明方法 第三步,在mapper中实现该 ...
- 【Scala】利用akka实现Spark启动通信
文章目录 思路分析 步骤 一.创建maven工程,导包 二.master进程代码开发 三.worker进程代码开发 思路分析 1.首先启动master,然后依次启动worker 2.启动worker时 ...
- 装完B就跑,这几个Linux指令真的Diǎo
本文介绍一些有趣的指令,实用或者可以装逼,不妨自己也来试试看: 文章目录 1 故事的开局 2 杰哥的表演 2.1 sl 2.2 htop 2.3 gcp 2.4 hollywood 2.5 cmatr ...
- Altium Designer PCB封装bug,元件焊盘位置偏移解决方法
1.问题描述:在拖动几个电阻位置时,意外发现Altium designer20版本软件的一个bug——0805的电阻两焊盘位置发生了偏移,如下图所示. 2.解决办法: ①选中焊盘偏移的封装,右键剪切掉 ...
- 什么是HTTP
什么是HTTP 什么是 HTTP ?你肯定立马跳出:"HTTP 是超文本传输协议,就是 HyperText Transfer Protocol". 这样回答还是过于简单,那到底什么 ...
- springboot+vue前后端免费开源
序言 继上一篇 一套管理系统基础模版 详细梳理一下安装流程,功能说明,开发规范等. 后端项目结构? 如何从零搭建环境开发? 如何打包部署? 接入开发及规范 项目地址 小结 后端项目结构 shop- ...
- Codeforces 1272E (Nearest Opposite Parity,反向建边)
题意:给你n个数,每个数的值为a[i],每个点可以从i这号点跳转至(i - a[i]) 或 (i + a[i])点,点的范围为[1,n],然后问的是从偶数点跳至奇数点,从奇数点跳至偶数点的最少次数是多 ...
- Spring Cloud 系列之 Consul 配置中心
前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...
- php的 mysqlnd驱动
这篇文章写的好 http://blog.linuxeye.com/395.html 传统编译php的时候需要指定mysql 的参数 --with-mysql=/usr/local/mysql \ -- ...