java.io包中提供了FilterInputStream类和FilterOutputStream类分别对其他输入/输出流进行特殊处理,它们在读/写数据的同时可以对数据进行特殊处理。另外它们还提供了同步机制,使得同一时刻只有一个线程可以访问一个输入/输出流。
FilterInputStream类和FilterOutputStream类都是抽象类,因此它们均不能实例化对象。
FilterInputStream类有三个子类分别为BufferedInputStream,DataInputStream和PushbackInputStream.
FilterOutputStream类亦有三个子类分别是BufferedOutputStream,DataOutputStream和PrintStream。
FilterInputStream类和FilterOutputStream类分别重写了InputStream和OutputStream的所有方法,他们的子类亦是如此。
请参考:
注意:使用过滤字节流时,由于过滤流不直接与底层的数据连接,必须先指定节点流对象处理底层数据,然后把节点流对象作为过滤流对象的实参使用。如下:File f1 = new File("d:\\test.txt");
FileInputStream fileInputStream = new FileInputStream(f1);
DataInputStream dataInputStream=new DataInputStream(fileInputStream);
BufferedInputStream和BufferedOutputStream类
BufferedInputStream和BufferedOutputStream类称为缓冲字节流,他引入了针对内存缓冲区的操作,从而提高了读写效率。java中引入了缓冲流,使缓冲流在应用程序和外部设备之间增加了一个内存缓冲区,当一个缓冲字节流对象和一个节点流相连接时,读写数据的操作不再是和外部设备直接打交道,而是先把这些数据放在内存缓冲区,等到缓冲区存满后再一并把缓冲区的数据输入或输出到指定设备。
如下为构造方法:
举一个复制文件的简单例子:import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class helloworld {
// 此方法可以对文件进行复制
public static void main(String[] args) {
// 对流进行声明
FileInputStream fins = null;
FileOutputStream fouts = null;
BufferedInputStream bins = null;
BufferedOutputStream bouts = null;
// try-catch进行异常处理
try {
// 使用节点流FileInputStream对象连接缓冲输入流BufferedInputStream
// 并指定缓冲区为1024
fins = new FileInputStream("d://test.txt");
bins = new BufferedInputStream(fins, 1024);
// 使用节点流FileOutputStream对象连接缓冲输出流BufferedOutputStream
fouts = new FileOutputStream("d://test2.txt");
bouts = new BufferedOutputStream(fouts, 1024);
// 声明字节数组,用作暂时存放数据的容器
byte[] buff = new byte[1024];
// 一次输入输出的长度标识
int len = 0;
// 循环读取输入流,循环内部直接使用输出流输出
while ((len = bins.read(buff)) != -1) {
bouts.write(buff, 0, len);
}
System.out.println("复制文件成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("复制文件失败");
} finally {
// 关闭文件流
try {
bins.close();
fins.close();
bouts.close();
fouts.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
如上代码使用缓冲字节流进行了文件的复制操作,详细代码解释请参考文中注释。