我只是使用
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();
答案 0 :(得分:7)
InputStream
,除非另有说明,否则为单次拍摄:您只需使用一次即可。
如果你想多次阅读它,那不仅仅是一个流,它是一个带缓冲区的流。您的解决方案准确反映了这一点,因此可以接受。我可能会改变的一件事是存储字节数组,并在需要时始终从中创建一个新的ByteArrayInputStream
,而不是重置相同的:{/ p>
byte [] content = IOUtils.toByteArray(myInputStream);
IOUtils.copy(new ByteArrayInputStream(content), myOutputStream);
doSomethingElse(new ByteArrayInputStream(content));
效果或多或少相同,但您可以更轻松地看到您尝试做的事情。