我只是用
IOUtils.copy(myInputStream, myOutputStream);
Run Code Online (Sandbox Code Playgroud)
我在调用IOUtils.copy之前看到输入流可以读取而不是之后.
flux.available()
(int) 1368181 (before)
(int) 0 (after)
Run Code Online (Sandbox Code Playgroud)
我看到了这方面的一些解释后,我看我可以复制 bytes从我InputStream的ByteArrayInputStream,然后用mark(0)和read(),以多次读取的输入流.
这是得到的代码(正在运行).我发现这段代码非常冗长,如果有更好的解决方案,我想要这样做.
ByteArrayInputStream fluxResetable = new ByteArrayInputStream(IOUtils.toByteArray(myInputStream));
fluxResetable.mark(0);
IOUtils.copy(fluxResetable, myOutputStream);
fluxResetable.reset();
Run Code Online (Sandbox Code Playgroud)
一InputStream,除非另有说明,是单发射击:你一次消费它,就是这样.
如果你想多次阅读它,那不仅仅是一个流,它是一个带缓冲区的流.您的解决方案准确反映了这一点,因此可以接受.我可能会改变的一件事是存储字节数组并ByteArrayInputStream在需要时始终从中创建一个新的,而不是重置相同的:
byte [] content = IOUtils.toByteArray(myInputStream);
IOUtils.copy(new ByteArrayInputStream(content), myOutputStream);
doSomethingElse(new ByteArrayInputStream(content));
Run Code Online (Sandbox Code Playgroud)
效果或多或少相同,但更容易看到你想要做的事情.
| 归档时间: |
|
| 查看次数: |
3446 次 |
| 最近记录: |