缓冲处理流
1、缓冲处理流:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream
2、通过构造器,传入节点流
(1)BufferedReader 本类组合
private Reader in;
(2)BufferedWriter 本类组合
private Writer out;
(3)BufferedInputStream 继承父类 FilterInputStream
protected volatile InputStream in;
(4)BufferedOutputStream 继承父类 FilterOutputStream
protected OutputStream out;
3、内部组合缓冲区数组,构造器可以指定缓冲区大小,默认大小 8192
(1)BufferedReader
private char cb[];
(2)BufferedWriter
private char cb[];
(3)BufferedInputStream
protected volatile byte buf[];
(4)BufferedOutputStream
protected byte buf[];
4、输入流的抽象父类:OutputStream、Writer,都定义 flush 方法,所有的输入流都没有 flush 方法
5、Writer 的子类 / 组合缓冲数组的流,需要 flush 才能输出写入
6、调用 close / 缓冲区数组写满时,会自动调用 flush
7、关闭 BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,只需要关闭外层流即可,底层自动关闭节点流
(例)拷贝文本
try (BufferedReader br = new BufferedReader(new FileReader("C://fileRead.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D://fileWrite.txt"))) {
String line;
while ((line = br.readLine()) != null) {//边读边写
bw.write(line);
bw.newLine();//写一行分隔符,行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符 \n
}
} catch (IOException e) {
e.printStackTrace();
}
(例)拷贝文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C://fileRead.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D://fileWrite.txt"))) {
byte[] bytes = new byte[1024];
int length;
while ((length = bis.read(bytes)) != -1) {//边读边写
bos.write(bytes, 0, length);//不调用write(byte b[]),防止写入多余数据
}
} catch (IOException e) {
e.printStackTrace();
}

浙公网安备 33010602011771号