【转】InputStream只能读取一次,如何实现复用?
需要对同个文件流进行两个操作,一个是上传文件存储到当前结点,一个是同步文件到其他结点。
由于流只能读取一次。于是要想办法让流可以重复使用。
//把InputStream首先转换成ByteArrayOutputStream.然后你就可以任意克隆你需要的InputStream了
byte[] dataBytes = getBytes(source);
InputStream in1 = new ByteArrayInputStream(dataBytes);
InputStream in2 = new ByteArrayInputStream(dataBytes);
public class BaseFileService {
/**
* 把InputStream首先转换成byte[].
* @param source
* @return
* @throws IOException
*/
protected byte[] getBytes(InputStream source) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = source.read(buffer)) > -1 ) {
baos.write(buffer, 0, len);
}
baos.flush();
return baos.toByteArray();
}
}
原文地址:https://blog.csdn.net/liu_xue_xue/article/details/109680126