gpt4 book ai didi

java - 如何在调用 IOUtils.copy 后重新读取 InputStream?

转载 作者:行者123 更新时间:2023-11-29 06:31:55 25 4
gpt4 key购买 nike

我只是用

IOUtils.copy(myInputStream, myOutputStream);

而且我看到在调用 IOUtils.copy 之前可以读取输入流,之后则不能读取。

flux.available()
(int) 1368181 (before)
(int) 0 (after)

我看到了一些解释 post ,我看到我可以将 bytes 从我的 InputStream 复制到 ByteArrayInputStream 然后使用 mark(0)read(),以便多次读取输入流。

这是生成的代码(正在运行)。我发现这段代码非常冗长,我希望有更好的解决方案。

ByteArrayInputStream fluxResetable = new ByteArrayInputStream(IOUtils.toByteArray(myInputStream));
fluxResetable.mark(0);
IOUtils.copy(fluxResetable, myOutputStream);
fluxResetable.reset();

最佳答案

除非另有说明,否则 InputStream 是单次的:您使用一次,仅此而已。

如果你想多次读取它,那不再只是一个流,它是一个带有缓冲区的流。您的解决方案准确地反射(reflect)了这一点,因此可以接受。我可能会更改的一件事是存储字节数组并始终在需要时从中创建一个新的 ByteArrayInputStream,而不是重置同一个:

byte [] content = IOUtils.toByteArray(myInputStream);
IOUtils.copy(new ByteArrayInputStream(content), myOutputStream);
doSomethingElse(new ByteArrayInputStream(content));

效果大致相同,但更容易看出您要做什么。

关于java - 如何在调用 IOUtils.copy 后重新读取 InputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31828443/

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