本文介紹一下如何重複消費input stream,普通的inputStream,消費一次以後,就不能再用了,有時候須要重複消費的話,就必須本身緩存一下。這裏定義了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