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

时间:2019-02-14 16:02:47

标签: java hadoop hdfs gzip

我有一个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文件。

1 个答案:

答案 0 :(得分:0)

为什么不只是将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();
    }
}

该解决方案利用了Java 9极其有用的InputStream#transferTo(OutputStream)的优势。如果您尚未使用Java 9,则需要手动将字节从一个流复制到另一流,或使用Apache Commons IOUtils的IOUtils.copy(InputStream, OutputStream)