用户将大文件上传到我的网站,我想将文件gzip并存储在blob中。所以我有一个未压缩的InputStream,blob需要一个InputStream。我知道如何使用GZIPOutputStream将InputStream压缩为Outputstream,但是如何从gzip的OutputStream返回到blob所需的InputStream。
我能找到的唯一方法是使用ByteArrayOutputStream,然后使用toByteArray创建一个新的InputStream。但这意味着我在内存中拥有该文件的完整副本。如果JDBC驱动程序实现将流转换为byte []也不会让我感到惊讶,因此我在内存中有两个副本。
答案 0 :(得分:4)
如果您使用的是java 1.6,则可以使用java.util.zip.DeflaterInputStream
。据我所知,这完全符合你的要求。如果您无法使用1.6,则应该可以使用DeflaterInputStream
重新实现java.util.zip.Deflater
。从BLOB读取数据时,使用InflaterInputStream
作为过滤器来获取原始数据。