FilterInputStream(过滤输入流)是处理流的一种,它包含其他一些输入流,将这些流用作其基本数据源,可以直接传输数据或提供一些额外的功能。
FilterOutputStream是过滤输出流的所有类的超类。这些流位于已存在的输出流(基础 输出流)之上,它们将已存在的输出流作为其基本数据接收器,但可能直接传输数据或提供一些额外的功能。
下面介绍一下它们的一些实现类。
- BufferedInputStream与BufferedOutputStream
BufferedInputStream:使用缓存区读取字节数据
BufferedOutputStream:使用缓存区将字节数据输出
public static void test1()throws Exception{
File file = new File("e:/2.mp4");
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = new FileOutputStream(new File("e:/test2.txt"));
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
byte[] b = new byte[1024];
while(bufferedInputStream.read(b) != -1){
bufferedOutputStream.write(b);
}
}
使用缓存流可有效提高程序运行效率。
- DataInputStream与DataOutputStream
DataInputStream与DataOutputStream:用于读取和输出基本数据类型
public static void test()throws Exception{
File file = new File("e:/data.txt");
FileInputStream inputStream = new FileInputStream(file);
FileOutputStream outputStream = new FileOutputStream(file);
byte[] b = "1234587".getBytes();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
//dataOutputStream.write(b);
//dataOutputStream.writeBoolean(true);
//dataOutputStream.writeChar('d');
dataOutputStream.writeUTF("肯建电视");
DataInputStream dataInputStream = new DataInputStream(inputStream);
System.out.println(dataInputStream.readShort());
//System.out.println(dataInputStream.readUTF());
inputStream.close();
outputStream.flush();
outputStream.close();
dataInputStream.close();
dataOutputStream.close();
}
- PushbackInputStream
PushbackInputStream 为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。
public static void test()throws Exception{
byte[] b = "abcdefggfdgert".getBytes();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(b);
PushbackInputStream pushbackInputStream = new PushbackInputStream(byteArrayInputStream);
int n;
while((n = pushbackInputStream.read()) != -1){
System.out.println((char)n);
if(n == 'c'){
pushbackInputStream.unread('5');
}
if(n == '5'){
pushbackInputStream.unread('7');
}
}
byteArrayInputStream.close();
pushbackInputStream.close();
}
源码:
https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/io