📜  Java.io.FilterInputStream类(1)

📅  最后修改于: 2023-12-03 15:31:34.769000             🧑  作者: Mango

Java.io.FilterInputStream类介绍

Java.io.FilterInputStream类是Java中IO流的一种,它允许一个输入流的功能被另一个更有用的流包装起来,这可以添加一些附加的功能和处理。该流的子类可以更改流中某些方法的行为,可以过滤器输入流的数据格式或提供额外的处理。

继承关系

Java.io.FilterInputStream类是InputStream类的子类,它继承了InputStream的所有方法,同时也继承了如下方法。

public abstract int read() throws IOException;
public int read(byte[] b) throws IOException;
public int read(byte[] b, int off, int len) throws IOException;
public long skip(long n) throws IOException;
public int available() throws IOException;
public void close() throws IOException;
public synchronized void mark(int readlimit);
public synchronized void reset() throws IOException;
public boolean markSupported();
方法说明

Java.io.FilterInputStream类的主要方法有以下几个:

构造方法
  • FilterInputStream(InputStream in):创建一个新的包含指定输入流的过滤器输入流。
过滤器方法
  • int read():从输入流中读取下一个字节。
  • int read(byte[] b, int off, int len):将输入流的数据读取到字节数组中,并将读取的字节数量返回。
  • long skip(long n):从输入流中跳过并丢弃n个字节的数据,并返回实际跳过的字节数。
  • int available():返回输入流中的剩余字节数。
  • void close():关闭输入流及其底层流。
使用示例
import java.io.*;

public class FilterInputStreamDemo {
    public static void main(String[] args) {
        String str = "Hello, world!";
        ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
        FilterInputStream fis = new BufferedInputStream(bis);
        int data;
        try {
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述示例中,我们通过创建一个ByteArrayInputStream流,将字符串"Hello, world!"转化为字节数组,然后再创建一个BufferedInputStream流,将前面的输入流包装起来。最后,我们使用一个while循环来逐个读取字节并将其转化为字符,最终输出"Hello, world!"。

总结

Java.io.FilterInputStream类是Java中IO流机制中一种有用的流处理方式,它通过对已有的输入流进行包装,添加特定的过滤器,从而实现对数据进行处理的功能。该类的方法由父类InputStream所提供,并添加了自己的一些方法,能够实现流的跳过、剩余字节数、关闭等操作。