我试图从流中获取内容的副本而不使用它。我的计划是在后面的代码中使用这个原始流。以下是我尝试检查的示例代码。我的目的是保留原始的InputStream以供将来在获得副本后使用
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamTest {
public static void main(String[] args) {
try {
InputStream inputstream = new FileInputStream("resource.txt"); // content of the file is 'test'
ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(inputstream, baos);
byte[] bytes = baos.toByteArray();
System.out.println("copied stream : " + new String(bytes));
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(inputstream));
String line;
while ((line = br.readLine()) != null) {
sb.append(line + System.lineSeparator());
}
System.out.println("original stream : " + sb.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我访问原始流时,在处理它之后,我仍然看到原始流被消耗。请参阅下面的输出
copied stream : test
original stream :
Run Code Online (Sandbox Code Playgroud)
有人可以指出我的错误吗
谢谢
遗憾的是,由于流的本质,这是不可能的。
为了从流中复制数据,您需要首先提取它。通过提取它,您可以使用该流。
但不用担心,应该有适合您的特定用例的解决方案。也许打开另一个流(如果您知道流的源每次都提供相同的数据 - 就像在文件中一样 - ,您可以在任何需要使用 InputStream 的地方使用Supplier,以便在必要时创建一个新流),或者您可以查看这篇文章以使用相同的数据创建更多流:/sf/answers/414689271/
| 归档时间: |
|
| 查看次数: |
6068 次 |
| 最近记录: |