如何有效地将未压缩的InputStream转换为gzip的InputStream?

时间:2010-02-02 18:21:21

标签: java gzip blob inputstream outputstream

用户将大文件上传到我的网站,我想将文件gzip并存储在blob中。所以我有一个未压缩的InputStream,blob需要一个InputStream。我知道如何使用GZIPOutputStream将InputStream压缩为Outputstream,但是如何从gzip的OutputStream返回到blob所需的InputStream。

我能找到的唯一方法是使用ByteArrayOutputStream,然后使用toByteArray创建一个新的InputStream。但这意味着我在内存中拥有该文件的完整副本。如果JDBC驱动程序实现将流转换为byte []也不会让我感到惊讶,因此我在内存中有两个副本。

1 个答案:

答案 0 :(得分:4)

如果您使用的是java 1.6,则可以使用java.util.zip.DeflaterInputStream。据我所知,这完全符合你的要求。如果您无法使用1.6,则应该可以使用DeflaterInputStream重新实现java.util.zip.Deflater。从BLOB读取数据时,使用InflaterInputStream作为过滤器来获取原始数据。