InputStream的重复读
InputStream inputStream = new FileInputStream(path);
//利用inputStream
inputStream = new FileInputStream(path);
//再次利用inputStreampublic void doSomething(InputStream is){
//use InputStream here
}public class InputStreamCacher {
/**
* 将InputStream中的字节保存到ByteArrayOutputStream中。
*/
private ByteArrayOutputStream byteArrayOutputStream = null;
public InputStreamCacher(InputStream inputStream) {
if (ObjectUtils.isNull(inputStream))
return;
byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = inputStream.read(buffer)) > -1 ) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
public InputStream getInputStream() {
if (ObjectUtils.isNull(byteArrayOutputStream))
return null;
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
}
}
//使用
public void doSomething(InputStream is){
InputStreamCacher cacher = new InputStreamCacher(is);
InputStream stream = cacher.getInputStream();
//读取stream
stream = cacher.getInputStream();
}Last updated