有時候我們需要對同一個InputStream對象使用多次。比如,客戶端從服務器獲取數據 ,利用HttpURLConnection的getInputStream()方法獲得Stream對象,這時既要把數據顯示到前台(第一次讀取),又想把數據寫進文件緩存到本地(第二次讀取)。
但第一次讀取InputStream對象后,第二次再讀取時可能已經到Stream的結尾了(EOFException)或者Stream已經close掉了。
而InputStream對象本身不能復制,因為它沒有實現Cloneable接口。此時,可以先把InputStream轉化成ByteArrayOutputStream,后面要使用InputStream對象時,再從ByteArrayOutputStream轉化回來就好了。代碼實現如下:
InputStream input = httpconn.getInputStream();
ByteArrayOutputStream baos =
new
ByteArrayOutputStream();
byte
[] buffer =
new
byte
[
1024
];
int
len;
while
((len = input.read(buffer)) > -
1
) {
baos.write(buffer,
0
, len);
}
baos.flush();
InputStream stream1 =
new
ByteArrayInputStream(baos.toByteArray());
//TODO:顯示到前台
InputStream stream2 =
new
ByteArrayInputStream(baos.toByteArray());
//TODO:本地緩存