Java:如何将InputStream转换为GZIPInputStream?

时间:2012-09-07 16:32:26

标签: java inputstream gzipinputstream

我有像

这样的方法
      public void put(@Nonnull final InputStream inputStream, @Nonnull final String uniqueId) throws PersistenceException {
        // a.) create gzip of inputStream
        final GZIPInputStream zipInputStream;
        try {
            zipInputStream = new GZIPInputStream(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
            throw new PersistenceException("Persistence Service could not received input stream to persist for " + uniqueId);
        }

我想将inputStream转换为zipInputStream,这样做的方法是什么?

  • 上述方法不正确,并将异常抛出为“非Zip格式”

将Java Streams转换给我真是令人困惑,而且我没有把它们做对了

2 个答案:

答案 0 :(得分:11)

GZIPInputStream将用于解压缩传入的InputStream。要使用GZIP压缩传入的InputStream,您基本上需要将其写入GZIPOutputStream

如果您使用ByteArrayOutputStream将gzip压缩内容写入InputStreamByteArrayInputStreambyte[]转换为byte[],则可以从中获取新的InputStream public void put(@Nonnull final InputStream inputStream, @Nonnull final String uniqueId) throws PersistenceException { final InputStream zipInputStream; try { ByteArrayOutputStream bytesOutput = new ByteArrayOutputStream(); GZIPOutputStream gzipOutput = new GZIPOutputStream(bytesOutput); try { byte[] buffer = new byte[10240]; for (int length = 0; (length = inputStream.read(buffer)) != -1;) { gzipOutput.write(buffer, 0, length); } } finally { try { inputStream.close(); } catch (IOException ignore) {} try { gzipOutput.close(); } catch (IOException ignore) {} } zipInputStream = new ByteArrayInputStream(bytesOutput.toByteArray()); } catch (IOException e) { e.printStackTrace(); throw new PersistenceException("Persistence Service could not received input stream to persist for " + uniqueId); } // ...

所以,基本上:

ByteArrayOutputStream

如果需要,您可以在ByteArrayInputStream创建的临时文件上用FileOuputStream / FileInputStream替换File#createTempFile() / {{1}},尤其是在这些流中可以包含大数据,这些数据可能会在同时使用时溢出机器的可用内存。

答案 1 :(得分:5)

GZIPInputStream用于阅读 gzip编码内容。

如果你的目标是采用常规输入流并以GZIP格式压缩它,那么你需要将这些字节写入GZIPOutputStream

另见this answer to a related question