重複消費input stream的方法

本文介紹一下如何重複消費input stream,普通的inputStream,消費一次以後,就不能再用了,有時候須要重複消費的話,就必須本身緩存一下。這裏定義了ReuseableStream類,能夠用來實現這個目的。緩存

ReuseableStream

public class ReuseableStream {

    private InputStream inputStream;

    public ReuseableStream(InputStream inputStream) {
        if (!inputStream.markSupported()) {
            this.inputStream = new BufferedInputStream(inputStream);
        } else {
            this.inputStream = inputStream;
        }
    }

    public InputStream open() {
        inputStream.mark(Integer.MAX_VALUE);
        return inputStream;
    }

    public void reset() throws IOException {
        inputStream.reset();
    }
}

開啓並重復使用

ReuseableStream reuse = new ReuseableStream(IOUtils.toInputStream("hello", Charsets.UTF_8));
System.out.println(IOUtils.toString(reuse.open(),Charsets.UTF_8));
reuse.reset();
System.out.println(IOUtils.toString(reuse.open(),Charsets.UTF_8));

open的時候mark一下,而後想重複使用的時候reset一下。this

doc

相關文章
相關標籤/搜索