回顾流的分类
1)按照数据单位的不同流可分为:字节流和字符流
2)按照数据流的流向可分为:输入流和输出流
3) 按流的角色的不同分为:节点流,处理流
抽象基类 节点流(字节流/字符流) 缓冲流 (处理流的一种)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
为什么使用缓冲流
为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组。
根据数据操作单位可以把缓冲流分为:
BufferedInputStream 和 BufferedOutputStream
BufferedReader 和 BufferedWriter
缓冲流的使用(处理流之一:缓冲流)
缓冲流要“套接”在相应的节点流(FileInputStream ,FileOutputStream)之上也就是说创建一个缓冲自己输入流 new BufferedInputStream(FileInputStream);。同理输出流也是这样。对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
对于输出的缓冲流,写出的数据会先在内存中缓存,使用**flush()**将会使内存中的数据立刻写出.
具体使用步骤
1)提供读入和写出的文件
2)创建相应的节点流(因为缓冲流是建立在节点流之上的)
3)将创建的节点流对象作为形参传递给缓冲流的构造器
4)写具体的操作
5)关闭流 先关闭缓冲输出流,在关闭缓冲输入流 因为缓冲流包含节点流 所以不用关闭节点流 直接关闭缓冲流即可。
代码实现
package com.ghl.io;
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.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class BufferInputOutPutStreamDemo {
public static void main(String[] args) {
testMyOutput(); //BufferInputStream BufferOutputStream
testBufferedRead();//BufferedReader 和 BufferedWriter
}
// 实现文件复制(BufferInputStream BufferOutputStream)
public static void testMyOutput() {
try {
// 1.需要读和写的文件 文件的复制操作
File file = new File("2.jpg");
File file2 = new File("3.jpg");
// 2.创建相应的节点流(因为缓冲流是建立在节点流之上的)
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file2);
// 3.将创建的节点流对象作为形参传递给缓冲流的构造器
BufferedInputStream