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

问题描述 投票:0回答: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文件。

java hadoop hdfs gzip
1个回答
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)

© www.soinside.com 2019 - 2024. All rights reserved.