6.3(java学习笔记)缓冲流
一、缓冲流
使用缓冲流后的输入输出流会先存储到缓冲区,等缓冲区满后一次性将缓冲区中的数据写入或取出。
避免程序频繁的和文件直接操作,这样操作有利于提高读写效率。
缓冲流是构建在输入输出流之上的,可以理解为是对基本输入输出流的增强和扩展,但其根本是建立在输入输出流之上的。
1.字节缓冲流
1.1字节缓冲流类
BufferInputStream
BufferOutputStream
1.2.构造方法:
传递参数为输入、输出流对象。
BufferedInputStream(InputStream in)//构造方法,创建一个缓冲流,保存其参数(输入流),供后续使用
BufferedInputStream(InputStream in, int size)//创建一个缓冲流,size为设置缓冲区大小
BufferedOutputStream(OutputStream out)//创建输出缓冲流
BufferedOutputStream(OutputStream out, int size)//size为缓冲区大小
1.3.例子
给输入输出流加上缓冲流后,其基本功能和方法并没有改变,只是改变了读写所采取的策略,基本方法和操作方式没有发生变化。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Flushable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer; public class Test {
public static void main(String[] args){
String pathW = "F:\\依风\\Desktop\\writer.txt";
String pathR = "F:\\依风\\Desktop\\reader.txt";//此处的reader.txt中要有数据 File fr = new File(pathR);
File fw = new File(pathW);
InputStream r = null;
OutputStream w = null;
InputStream bufferR = null;
OutputStream bufferW = null;
try {
int c = 0;
r = new FileInputStream(fr);
w = new FileOutputStream(fw);
bufferR = new BufferedInputStream(r);//将输入输出流加上缓冲
bufferW = new BufferedOutputStream(w);
try {
while(-1 != (c = bufferR.read())){//读一个字符
bufferW.write(c);
System.out.print((char)c);
}
bufferW.flush();//将缓冲区剩余数据写入 } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bufferW.close();//关闭资源
bufferR.close();
r.close();
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}
运行结果:
BufferedStream
2.字符缓冲流
2.1字符缓冲流类
BufferedWriter
BufferedReader
2.2构造方法
BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)
创建字符缓冲流,sz为指定缓冲区大小。
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)
2.3新增方法
BufferedWtriter:void newLine()//写入行分隔符,简单的说就是加上回车换行
BufferedReader:String readLine()//读取一行,以字符串形式返回读取内容。如果已到末尾返回null
有一点需要注意,这里的新增方法在它们的父类(Wtriter,Reader)中并没有,所以需要使用这些方法时不能发生多态。
3.4例子
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Flushable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer; public class Test {
public static void main(String[] args){
String pathW = "F:\\依风\\Desktop\\writer.txt";
String pathR = "F:\\依风\\Desktop\\reader.txt";//该文件必须已有数据
/*此时该文件中的数据:
*BufferedStream
*BufferReader
*BufferWriter
*
*/ File fr = new File(pathR);
File fw = new File(pathW);
Reader r = null;
Writer w = null;
BufferedReader bufferR = null;//此处使用的BufferedReader、BufferedWtriter中独有的方法
BufferedWriter bufferW = null;//故不能发生多态,所有不能使用Reader或Writer
try {
String str;
r = new FileReader(fr);
w = new FileWriter(fw);
bufferR = new BufferedReader(r);//将输入输出流加上缓冲
bufferW = new BufferedWriter(w);
try {
while(null != (str = bufferR.readLine())){//读一行
bufferW.write(str);//将读取的字符串写入
bufferW.newLine();//写入换行分隔符,即回车
System.out.println(str);//输出读取和写入的数据
}
bufferW.flush();//将缓冲区剩余数据写入 } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bufferW.close();//关闭资源
bufferR.close();
r.close();
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}
运行结果:
BufferedStream
BufferReader
BufferWriter
6.3(java学习笔记)缓冲流的更多相关文章
- java 学习笔记之 流、文件的操作
ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...
- Java 学习笔记 IO流与File操作
可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件 读文件示例代码 File file = new File("D:\\test\\t.txt" ...
- java学习笔记——IO流部分
IO流常用的有:字符流.字节流.缓冲流.序列化.RandomAccessFile类等,以上列出的都是开发中比较常用的. 1.字节流: 字节流包含:FileInputStream/FileOutputS ...
- java学习笔记--IO流
第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存 ...
- java学习笔记 --- IO流小结
IO流 |--字节流 |--字节输入流 InputStream int read():一次读取一个字节 int read(byte[] bys):一次读取一个字节数 ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- java学习笔记(7)——I/O流
一.File类 File(File parent, String child); File(Stirng filename); ------------------------------------ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 20145330第十周《Java学习笔记》
20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...
- 20145330第六周《Java学习笔记》
20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...
随机推荐
- 安卓titlebar的组合控件使用
http://blog.csdn.net/itachi85/article/details/51435187
- 使用mysqldump命令备份恢复MySQL数据库
1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文 ...
- 线程 ManualResetEvent 类
Reset(): 当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时, 它调用 Reset 以将 ManualResetEvent 置于非终止状态.此线程可被视为控制 ManualRese ...
- javascript提示抖动实现方法
css代码: <style type="text/css"> #div1{ width:200px; height:200px; background-color:or ...
- es6+最佳入门实践(7)
7.set和map数据结构 7.1.什么是set? Set就是集合,集合是由一组无序且唯一的项组成,在es6中新增了set这种数据结构,有点类似于数组,但是它的元素是唯一的,没有重复 let st = ...
- Linux下文件解压命令
1.压缩命令: 命令格式:tar -zcvf 压缩文件名.tar.gz 被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:tar -zxvf 压缩 ...
- jquery和ajax,json写法的说明
一: 在ajax中,如果没有用jquery,则如xmlHttpRequest.open("POST", "AjaxServlet", true); (1)如果用 ...
- 【STSRM13】花六游鸟小
[题意]给定n个节点的树,每个节点有一个m位二进制数,数字可以随时按位取反,每个数位有一个价值,定义每个点的最大价值是从根到这个点路上的数字(可以取反)或起来的数字中,1有价值0无价值,加起来得到的最 ...
- Linux ssh的使用
1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...
- Python与金融分析基础
一 .ipython的简单使用 IPython:交互式的Python命令行 丰富的快捷键 TAB键自动完成 ?:内省.命名空间搜索 !:执行系统命令 魔术命令:以%开始的命令 %run:执行文件代码 ...