将zip文件转换为gzip并写入hdfs

3ks5zfa0  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(395)

这个问题在这里已经有了答案

如何在java中将.zip压缩为.gz(1个答案)
去年关门了。
我有一个zip文件,我想把它转换成gzip并写回文件系统。我该怎么做?
我已经有了将文件压缩到gzip的代码:

private static void compressGzipFile(String file, String gzipFile) {
    try {
        FileInputStream fis = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(gzipFile);
        GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
        byte[] buffer = new byte[1024];
        int len;

        while ((len=fis.read(buffer)) != -1) {
            gzipOS.write(buffer, 0, len);
        }

        // Close resources
        gzipOS.close();
        fos.close();
        fis.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

现在我需要代码将zip文件转换为gzip文件。

u3r8eeie

u3r8eeie1#

为什么不直接用管子 ZipInputStream 直接进入 GZIPOutputStream ?

private static void convertZipToGzip(String zipFile, String gzipFile) {
    try (ZipInputStream zipIS = new ZipInputStream(file),
         GZIPOutputStream gzipOS = new GZIPOutputStream(gzipFile)) {
        zipIS.transferTo(gzipOS);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这个解决方案利用了Java9非常有用的优点 InputStream#transferTo(OutputStream) . 如果您还没有使用Java9,则需要手动将字节从一个流复制到另一个流,或者使用ApacheCommonsIOUtils IOUtils.copy(InputStream, OutputStream) .

相关问题