您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-IO之缓冲流
发布时间:2017-08-10 14:58:18编辑:雪饮阅读()
缓冲流概述
首先要明确一个概念:
对文件或其它目标频繁的读写操作,效率低,性能差。
使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来。
BufferedInputStream
public class BufferedInputStream
extends FilterInputStream
BufferedInputStream为另一个输入流添加一些功能,在创建BufferedInputStream时,会创建一个内部缓冲区数组,用于缓冲数据。
默认缓冲区大小为8192,即8k
BufferedOutputStream
public class BufferedOutputStream
extends FilterOutputStream
类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
示例代码:使用字节缓冲流进行读取操作
package com.vince.buffer;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class BufferedStreamDemo {
/**
* 使用字节缓冲流进行读取操作
* */
public static void input(){
String filePath="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
//构造一个字节输入流
try {
InputStream in = new FileInputStream(filePath);
//根据字节输入流构造一个字节缓冲流
BufferedInputStream bis=new BufferedInputStream(in);
//根据缓冲的字节流构造一个(字节流转换为字符流)
Reader r=new InputStreamReader(bis);
//设置每次从缓冲区中取出字符数
char[] cs=new char[512];
int len=-1;
StringBuilder sb=new StringBuilder();
while((len=r.read(cs))!=-1){
sb.append(new String(cs,0,len));
}
//关闭输入流
r.close();
//关闭字节缓冲流
bis.close();
//关闭
in.close();
System.out.println(sb);
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
input();
}
}
示例代码:使用字节缓冲流进行输出操作
package com.vince.buffer;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class BufferedStreamDemo {
public static void write(){
String filePath="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
try {
OutputStream out = new FileOutputStream(filePath);
//根据字节输出流构造一个字节缓冲流
BufferedOutputStream bos=new BufferedOutputStream(out);
String info="入江湖天涯仗剑,伴红颜且自逍遥。";
bos.write(info.getBytes());
bos.flush();//刷新缓冲区,一般我们需要bos.close才可以将文件写入,若不想关闭就写入,则需要bos.flush()
bos.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
write();
}
}
BufferedReader
public class BufferedReader
extends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
public class BufferedWriter
extends Writer
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
默认缓冲区大小为8192,即8k
代码示例:将文本写入字符输出流,通过缓冲区文件写入
package com.vince.buffer;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class BufferedStreamDemo {
public static void write(){
String filePath="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
try {
Writer w = new FileWriter(filePath);
//根据字符输出流构造一个字符缓冲流
BufferedWriter bw=new BufferedWriter(w);
bw.write(" 三千年读史,不外功名利禄;九万里悟道,终归诗酒田园。");
bw.flush();//刷新缓冲区
w.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
write();
}
}
示例代码:通过缓冲流对象文本读取操作
package com.vince.buffer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class BufferedStreamDemo {
public static void reader(){
String filePath="E:"+File.separator+"duminjie_love_gaojiupan"+File.separator+"BaiduNetdiskDownload.txt";
try {
Reader r= new FileReader(filePath);
//根据字符输入流构造一个字符缓冲流
BufferedReader br=new BufferedReader(r);
char[] cs=new char[512];
int len=-1;
StringBuilder sb=new StringBuilder();
while((len=br.read(cs))!=-1){
sb.append(new String(cs,0,len));
}
br.close();
r.close();
System.out.println(sb);
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
reader();
}
}
关键字词:javase,io,缓冲流