缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()、mark()、reset()、方法都成为可能。
特点:
缓存区的出现提高了对数据读写的效率。
缓存区要结合流才能实现。
缓存区在流的基础上对流的功能进行了加强。
BufferedReader:
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组、行的高效读取。
构造方法:
BufferedReader(reader in)
创建一个默认大小输入缓存区的字符输入流
BufferedReader(reader in, int sz)
创建一个给定大小输入缓存区的字符输入流
方法:
read();读取单个字符
read(char[] chuf, int off , int len );将字符读入数组的某一部分
readLine();读取一个文本行
实例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Bufferedreader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D:\\1.txt");
BufferedReader br = new BufferedReader(fr);
String str = null;
// <span style="background-color: rgb(240, 240, 240);">到NULL的时候,说明读到末尾</span>
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
}
}
用BufferedReader写的一个小demo,用readLine()方法一行一行读取数据,方便对文本数据的获取,到NULL的时候,说明读到末尾。然后打印数据,最后关闭缓冲流。
readline()方法原理:
readline()的底层实现也是read()方法,也是一次读一个的方法。当readline()读取一个一个的数据暂时取到自己封装的数组当中,当取到换行符的时候,自动把以上取到的数组变成一个字符串,输出出来。
readline()方法原理:
BufferedWriter:
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组、字符串的高效写入。
构造方法:
BufferedWriter(writer out)
创建一个默认大小输出缓存区的字符输出流
BufferedWriter(writer out , int sz)
创建一个给定大小输出缓存区的字符输出流
方法:
close()——关闭缓存区字符输出流
flush()——刷新流缓存数据,实时更新
write()——写入字符
newLine()——写入一个行分隔符,也是该缓存区中提供一个快平台的换行符
实例:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Bufferedwriter {
public static void main(String[] args) throws IOException {
// 字符写入流
FileWriter fw = new FileWriter("D:\\1.txt");
// 缓冲输出流
BufferedWriter bw = new BufferedWriter(fw);
// 输出字符串
bw.write("asdflkjasdlfjla");
// 刷新缓冲流
bw.flush();
// 关闭缓冲流
bw.close();
}
}
用法:
用缓冲区复制文件。
</pre><pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">public class CopyText {
public static void main(String[] args) {
// 声明缓冲输入输出
BufferedReader bis = null;
BufferedWriter bos = null;
// 可能有异常 要try catch
try {
// 创建缓冲输入,写出根路径
bis = new BufferedReader(new FileReader("D:\\1.txt"));
// 创建缓冲输出,写出复制文件路径
bos = new BufferedWriter(new FileWriter("D:\\2.txt"));
// 判断文件字节是否完结,无则继续写入复制文件。
String line = null;
while ((line=bis.readLine())!=null) {
//读取写入
bos.write(bis.read());
bos.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭输入流
try {
if (bis!=null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
// 关闭输出流
try {
if (bos!=null) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}