Java基础教程——缓冲流
缓冲流
“缓冲流”也叫“包装流”,是对基本输入输出流的增强:
字节缓冲流: BufferedInputStream , BufferedOutputStream
字符缓冲流: BufferedReader , BufferedWriter
缓冲流的基本原理:
创建流对象时,会创建一个缓冲区数组,通过缓冲区读写,减少系统IO次数,以提高读写效率。
就像送快递,快递小哥一次带一件当然慢,所以用车来运输,跑一趟可以带很多件。

以字符流为例:
|-读文件:FileReader + BufferedReader
|-写文件: FileWriter + BufferedWriter
package ahjava.p05io;
import java.io.*;
public class 字符流 {
public static void main(String[] args) {
字符流R();
字符流W();
}
static void 字符流R() {
File file = new File("testRead.dat");
// 通过文件对象创建文件读取流对象
FileReader fr;
try {
fr = new FileReader(file);
// 将文件读取流包装成缓冲读取流
BufferedReader br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null) // 逐行读取数据
{
System.out.println(str);
}
br.close(); // 关闭流
fr.close(); // 关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
static void 字符流W() {
File file = new File("testFileWriter.txt");
// 通过文件对象创建文件输出字符流对象
FileWriter fw;
try {
fw = new FileWriter(file);
// 将文件输出字符流包装成缓冲流
BufferedWriter bw = new BufferedWriter(fw);
bw.write("萨瓦迪卡");
bw.newLine(); // 换个新行
bw.write("どうぞ よろしく お愿いします");
bw.close(); // 关闭流
fw.close(); // 关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节流也有包装流,试用包装流改写文件复制的代码,并测试程序效率提升的情况。
java.io.BufferedOutputStream
java.io.BufferedInputStream
Java基础教程——缓冲流的更多相关文章
- Java基础教程——转换流
转换流 通常,Window默认的编码方式是GBK,Java项目一般建议设为UTF-8编码.这时候读取文件可能出现乱码.事实上实际应用中编码格式不匹配的场景非常多. 转换流可以指定编码方式,用于解决乱码 ...
- Java基础教程——打印流
打印流 打印流可以把原本输出到控制台的信息输出到文件中.PrintStream是字节打印流(还有个对应的字符打印流是PrintWriter,这里不涉及) System类中有个变量: public fi ...
- Java基础教程——字符流
字符流 字节流服务文本文件时,可能出现中文乱码.因为一个中文字符可能占用多个字节. 针对于非英语系的国家和地区,提供了一套方便读写方式--字符流. java.io.Reader java.io.Wri ...
- Java基础教程(25)--I/O
一.I/O流 I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等. 流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...
- Java基础教程:面向对象编程[2]
Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...
- Java基础教程:JDBC编程
Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...
- Java基础教程:面向对象编程[3]
Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- Java基础教程:多线程基础——线程池
Java基础教程:多线程基础——线程池 线程池 在正常负载的情况瞎,通过为每一个请求创建一个新的线程来提供服务,从而实现更高的响应性. new Thread(runnable).start() 在生产 ...
随机推荐
- java数据结构-11循环双端队列
@SuppressWarnings("unchecked") public class CircleDeque<E> { private int front; priv ...
- 应该怎么提升4G工业路由器的无线信号?
4G工业路由器如今应用的范围非常的广泛,在实际使用中也遇到了很多的问题,其中经常被问到的一个问题就是我们怎么保证4G工业路由器的良好信号强度.在互联网上也有很多关于如何找到最佳信号的方法,但对于固定和 ...
- 1_Two Sum
1.Two Sum Given an array of integers, return indices of the two numbers such that they add up to a s ...
- AE(After Effects)的简单使用——记一次模板套用的过程
一.环境配置 操作系统:win10 64位 软件版本:AE16.11版 二.模板下载 可去 newcger 网站进行模板下载,常用都是免费的,很好用,很推荐 三.具体操作 1.模板素材替换 点击[文件 ...
- Hangfire只允许同时运行同一个任务
Hangfire有个机制可以确保所有任务都会被执行,如果当服务器停机了一段时间重新启动时,在此期间的周期任务会几乎同时执行.而大部分时候,我们希望同个周期任务每段时间只运行一个就行了. 或者是如果周期 ...
- 4 urllib和urllib2的区别
4 urllib和urllib2的区别 这个面试官确实问过,当时答的urllib2可以Post而urllib不可以. urllib提供urlencode方法用来GET查询字符串的产生,而urllib2 ...
- 获取url后面的参数
function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = qu ...
- 基于CPU版本的Caffe推理框架
最近一段时间,认真研究了一下caffe.但是,里面内容过多,集合了CPU版本和GPU版本的代码,导致阅读起来有些复杂.因此,特意对caffe代码进行了重构,搭建一个基于CPU版本的Caffe推理框架. ...
- http 请求体数据--ngx
HTTP包体的长度有可能非常大,不同业务可能对包体读取 处理不相同, 比如waf, 也许会读取body内容或者只是读取很少的前几十字节.所以根据不同业务特性,对http body 数据包处理方式不同, ...
- linux 内存泄露 valgrind
内泄漏工具 valgrind: https://linux.die.net/man/1/valgrind www.valgrind.org/docs/manual/index.html www.val ...