我可以看到有很多关于重用的帖子InputStream
。我理解InputStream
是一次性的,不能重复使用。
但是,我有一个这样的用例:
我已经DropBox
通过DropBoxInputStream
使用DropBox's Java SDK
. 然后我需要通过传递文件将文件上传到另一个系统InputStream
。但是,作为下载的一部分,我必须提供MD5
文件的。所以我必须在上传文件之前从流中读取文件。因为DropBoxInputStream
我收到的只能使用一次,所以我必须DropBoxInputStream
在计算好MD5
之后再上传文件。程序是这样的:
- 获取第一个 DropBoxInputStream
- 从 DropBoxInputStream 读取并计算 MD5
- 获取第二个 DropBoxInputStream
- 使用 MD5 和第二个 DropBoxInputStream 上传文件。
我在想,如果在InputStream
计算之前有很多方法可以让我“缓存”或“备份”,MD5
这样我就可以保存再次获得相同结果的第 3 步DropBoxInputStream
?
非常感谢
编辑:
对不起,我错过了一些信息。
我目前正在做的是使用 aMD5DigestOutputStream
来计算MD5
. 我通过流式传输数据 MD5DigestOutputStream
并将它们本地保存为临时文件。一旦数据通过MD5DigestOutputStream
,它将计算MD5
。
然后我调用第三方库使用计算出的 md5 和FileInputStream
从临时文件中读取的 a 来上传文件。
但是,有时这需要巨大的磁盘空间,我想消除使用临时文件的需要。我使用的库只接受一个MD5
and InputStream
。这意味着我必须自己计算MD5
。我的计划是使用 myMD5DigestOutputStream
将数据写入/dev/null
(不保留文件),以便我可以计算MD5
,并InputStream
再次从 DropBox 获取并将其传递给我使用的库。我假设库将能够直接从中获取文件,DropBox
而无需我将文件缓存在磁盘的内存中。它会起作用吗?