对同一个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(); //获取内存缓存的字节数组 byte[] byteArray = baos.toByteArray(); //显示到前台 InputStream stream1 = new ByteArrayInputStream(byteArray); //本地缓存 InputStream stream2 = new ByteArrayInputStream(byteArray);
InputStream重用技巧(利用ByteArrayOutputStream)
原文:http://www.cnblogs.com/hongwz/p/5322893.html