一、缓冲流

  使用缓冲流后的输入输出流会先存储到缓冲区,等缓冲区满后一次性将缓冲区中的数据写入或取出。

  避免程序频繁的和文件直接操作,这样操作有利于提高读写效率。

  缓冲流是构建在输入输出流之上的,可以理解为是对基本输入输出流的增强和扩展,但其根本是建立在输入输出流之上的。

  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

最新文章

  1. 装饰者模式 Decoration
  2. windows上如何搭建Git Server
  3. hadoop2.6.4 搭建伪分布式
  4. java记录
  5. Python网络编程之线程,进程
  6. “耐撕”团队2016.04.14站立会议
  7. SDE+ORACLE优化配置
  8. 在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)
  9. #IOS-navigation中左滑pop的三种方法
  10. hive union all 使用
  11. POI处理Excel中各种日期格式问题
  12. tomcat下服务启动失败原因
  13. 【洛谷】【模拟+栈】P4711 「化学」相对分子质量
  14. Golang操作结构体、Map转化为JSON
  15. Excel导入MS SQL SERVER 操作
  16. js重名的处理
  17. JAVA-Unit03: SQL(基础查询) 、 SQL(关联查询)
  18. Delphi IOS 蓝牙锁屏后台运行
  19. Oracle数据库之日期函数
  20. arm-linux-gcc4.4.3编译s3c2410平台linux内核

热门文章

  1. LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)
  2. VC++使用CImage在内存中Jpeg转换Bmp图片
  3. 精通javascript笔记(智能社)——数字时钟
  4. NodeJS概述
  5. [bzoj2251][2010Beijing Wc]外星联络——后缀数组+暴力求解
  6. Python小程序之sed命令替换
  7. 如何在Ubuntu 16.04安装的Git【转】
  8. module加载过程初步分析[更新中]【转】
  9. python面向对象之__new__方法
  10. [ Linux 命令 ] grep