IO流(5)—缓冲流
1.IO体系:
- 抽象基类——节点流(文件流)——缓冲流(处理流的一种)
- InputStream ——FileInputStream——BufferedInputStream
- OutputStream——FileOutputSteam——BufferedOutputStream(flush())
- Reader——FileReader——BufferedReder(readLine())
- Writer——FileWriter——BufferedWriter(flush())
2.分类
处理流之一:
- 缓冲流:BufferedInputStream和BufferedOutputStream(字节流)
用于处用于处理视频文件、音频文件、图片、.doc等非文本文件,作用:加速文件传输
缓冲流:BufferedReader和BufferedWriter(字符流)
- 主要用于处理纯文本文件(.txt)。
3.代码实例
字节缓冲流
public class BufferedInputOutputStream {
//计算使用缓冲流BufferedInputStream和BufferedOutputStream传输非文本文件的时间
@Test
public void spendTime(){
long start = System.currentTimeMillis();
String src = "file/1.mp4";
String dest = "file/2.mp4";
testBufferedInputOutputStream(src,dest);
long end = System.currentTimeMillis();
System.out.println("花费时间为:"+(end - start));//时间为504毫秒
}
//使用缓冲流把非文本文件复制一份
//@Test
public void testBufferedInputOutputStream(String src,String dest){
//3.创建缓冲流对象
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//1.File类对象
File file1 = new File(src);
File file2 = new File(dest);
//2.创建节点流对象
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
byte[] b = new byte[1024];
int len;
//4.开始读取文件,写入文件
while((len = bis.read(b)) != -1){
bos.write(b,0,len);
//flush()是强行将缓冲区中的内容输出,否则直到缓冲区满后才会一次性的将内容输出
bos.flush();//刷新
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bos != null){
//5.关闭流
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bis != null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
字符缓冲流
public class BufferedReaderWriter {
//把文件文件复制到另一个文本文件
@Test
public void testBufferedReaderWriter(){
//3.定义两个缓冲流
BufferedReader br = null;
BufferedWriter bw = null;
try {
//1.定义两个文件对象
File file = new File("file/hello.txt");
File file1 = new File("file/hello5.txt");
//2.定义两个节点流
FileReader fr = new FileReader(file);
FileWriter fw = new FileWriter(file1);
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
//4.开始读取文件——方法一
/*char[] c = new char[1024];
int len;
while((len = br.read(c)) != -1){
bw.write(c, 0, len);
}*/
//开始读取文件——方法二
String str;
while((str = br.readLine()) != null){
bw.write(str+"\n");//或者bw.newLine();
bw.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//5.关闭
if(bw != null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bw != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
IO流(5)—缓冲流的更多相关文章
- java的 IO流之缓冲流(转载)
java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装.当对文件或其他目标频繁读写或操作效率低,效能差.这时使用缓冲流能够更高效的读写信息.因为缓冲流先将数据缓存起来 ...
- IO流之缓冲流
缓冲流 Java中提高了一套缓冲流,它的存在,可提高IO流的读写速度 缓冲流,根据流的分类字节缓冲流与字符缓冲流. 字节缓冲流 字节缓冲流根据流的方向,共有2个 l 写入数据到流中,字节缓冲输出流 ...
- IO流----转换流、缓冲流
打开一个文本文件,另存为: Ansi就是系统默认编码(就是gbk) 建一个编码是utf-8的txt文件, 例: import java.io.FileWriter; import java.io.IO ...
- IO(转换流、缓冲流)
第1章 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者Output ...
- java:IO流(处理流(缓冲流,转换流,数据流),对象的序列化,Properties)
字节缓冲流:(BufferedInputStream,BufferedOutStream) *按照流的功能来分:节点流和处理流 *节点流可以直接操作数据源: *InputStream *--FileI ...
- java - >IO流_缓冲流(高效流)
缓冲流(高效流) 在我们学习字节流与字符流的时候,大家都进行过读取文件中数据的操作,读取数据量大的文件时,读取的速度会很慢,很影响我们程序的效率,那么,我想提高速度,怎么办? Java中提高了一套缓冲 ...
- IO—》转换流和缓冲流
转换流 摘要: InputStreamReader和OutputStreamWriter他们分别是FileReader和FileWriter的父类 当只是单纯的读写文件而不改变文件的编码格式时,就分别 ...
- java 输入输出IO流 字节流| 字符流 的缓冲流:BufferedInputStream;BufferedOutputStream;BufferedReader(Reader in);BufferedWriter(Writer out)
什么是缓冲流: 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率. 图解: 1.字节缓冲流BufferedInputStr ...
- IO Streams:缓冲流
我们迄今为止看到的大多数示例都使用无缓冲的I / O.这意味着每个读或写请求都由底层操作系统直接处理.这使程序效率变得很低,因为每个这样的请求经常触发磁盘访问,网络活动或一些相对昂贵的其他操作. 为了 ...
- Java转换流、缓冲流、流操作规律整理
转换流 1.1 OutputStreamWriter类 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字 ...
随机推荐
- 【LGR-052】洛谷9月月赛II(加赛)
题解: 没打... ab题满世界都过了应该没什么意思 c题是个比较有意思的思维题(先看了题解才会的...) 我们考虑这么一件事情 没钥匙的人出门后 门一定是开着的 他进来的时候,门一定是开着的 其他时 ...
- Python学习(十三) —— 网络编程
一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...
- POJ3321Apple Tree Dfs序 树状数组
出自——博客园-zhouzhendong ~去博客园看该题解~ 题目 POJ3321 Apple Tree 题意概括 有一颗01树,以结点1为树根,一开始所有的结点权值都是1,有两种操作: 1.改变其 ...
- Java中String直接赋字符串和new String的区别(面试常考)
摘取自:https://www.cnblogs.com/guozhenqiang/p/5633269.html 解析Java中的String对象的数据类型 1. String是一个对象. 因为对象的 ...
- 防止vs编译时自动启动单元测试
Tools → Options → Live Unit Testing Pause 勾选
- day32 process模块用法
昨日作业: 服务端: 服务端: from socket import * from multiprocessing import Process def server(ip,port): server ...
- miniui格式化日期的方法
<div field="InsertTime" renderer="ondayRenderer" headerAlign="center&quo ...
- 给力的移动 FZU - 2287
你的弟弟给你安排了一个任务,他给了你1到N个数字的乱序排列,现在你想给你的弟弟秀一波操作,操作最少的次数把序列变成1到N的顺序排列,每次操作你可以选择序列中的一个数字并把它移动到序列的头部或尾部. I ...
- 003.MySQL高可用主从复制新增slave
一 基础环境 主机名 系统版本 MySQL版本 主机IP master CentOS 6.8 MySQL 5.6 172.24.8.10 slave01 CentOS 6.8 MySQL 5.6 17 ...
- python数据结构之冒泡排序
冒泡排序是一种基础排序算法,在python中,我们利用列表的的方式来完成,它对列表中的元素进行重复的遍历,在遍历的同时进行比较,如果两个数没有按照我们规定的顺序进行排列,就按照我们预先设定好的是顺序或 ...