一、重复读取InputStream流的方法
在 Java 中,通常情况下不建议对同一个
InputStream
对象直接使用两次,因为InputStream
是一次性读取的流,读取一次后,流中的位置指针会移动到末尾,再次读取可能无法获取到预期的数据。
- 但是如果确实需要使用同一个
InputStream
两次,可以采用以下方法:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamTwiceExample {
public static void main(String[] args) {
try (InputStream inputStream = "你的输入流来源" ) {
// 缓存文件流
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int nRead;
while ((nRead = inputStream.read(data, 0, data.length))!= -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
// 第一次使用
try(InputStream firstUse = new ByteArrayInputStream(buffer.toByteArray())){
// 处理第一次使用的逻辑
}
// 第二次使用
try(InputStream secondUse = new ByteArrayInputStream(buffer.toByteArray())){
// 处理第二次使用的逻辑
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、后记
最近在处理两个项目附件同步的问题,涉及到InputStream的重复读取,最终用了以上解法。
上述解法能在文件流使用完后,自动关闭文件流。
要是文章对您有帮助,欢迎点赞、收藏、评论!