gpt4 book ai didi

java - 从流中获取副本而不消耗原始流

转载 作者:行者123 更新时间:2023-12-02 00:58:53 28 4
gpt4 key购买 nike

我正在尝试从流中获取内容的副本而不使用它。我的计划是在后面的代码中使用这个原始流。以下是我尝试检查的示例代码。我的目的是保留原始的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();
}
}
}

但是,当我访问原始流时,在处理它之后,我仍然看到原始流被消耗。请参阅下面的输出

copied stream    : test
original stream :

谁能指出我的错误

谢谢

最佳答案

遗憾的是,由于流的本质,这是不可能的。

为了从流中复制数据,您需要首先提取它。通过提取它,您可以使用该流。

但不用担心,应该有适合您的特定用例的解决方案。也许打开另一个流(如果您知道流的源每次都提供相同的数据 - 就像在文件中一样 - ,您可以在任何需要使用 InputStream 的地方使用Supplier,以便在必要时创建一个新流),或者您可以查看这篇文章以使用相同的数据创建更多流:https://stackoverflow.com/a/5924132/3102234

关于java - 从流中获取副本而不消耗原始流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60965456/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com