📜  在Java中使用GZIP格式压缩和解压文件(1)

📅  最后修改于: 2023-12-03 15:07:53.644000             🧑  作者: Mango

在Java中使用GZIP格式压缩和解压文件

在Java中,我们可以使用GZIP格式对文件进行压缩和解压缩,以减小文件大小,提高传输效率。

压缩文件

下面是使用GZIPOutputStream压缩文件的示例代码:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.GZIPOutputStream;

public class GzipCompress {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("file.txt");
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream("file.gz");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        GZIPOutputStream gzos = new GZIPOutputStream(bos);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = bis.read(buffer)) != -1) {
            gzos.write(buffer, 0, len);
        }

        gzos.finish();
        gzos.close();
        bos.close();
        fos.close();
        bis.close();
        fis.close();
    }
}

其中,我们首先通过FileInputStream读取需要压缩的文件,然后经过BufferedInputStream的缓存,再通过FileOutputStream将压缩后的文件写入磁盘中。

GZIPOutputStream是使用GZIP格式进行压缩的类,它接收一个OutputStream作为参数,可以将数据压缩后写入这个输出流中。

在上述代码中,我们使用while循环不断从输入流中读取数据并写入GZIPOutputStream中,并在最后调用finish()方法完成压缩。

解压文件

下面是使用GZIPInputStream解压文件的示例代码:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.GZIPInputStream;

public class GzipDecompress {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("file.gz");
        BufferedInputStream bis = new BufferedInputStream(fis);
        GZIPInputStream gzis = new GZIPInputStream(bis);
        FileOutputStream fos = new FileOutputStream("file.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = gzis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }

        bos.close();
        fos.close();
        gzis.close();
        bis.close();
        fis.close();
    }
}

与压缩文件的代码相似,我们首先通过FileInputStream读取需要解压的文件,然后经过BufferedInputStream的缓存,再通过GZIPInputStream将压缩后的文件解压缩。

最后,我们将解压后的数据写入到FileOutputStream中,再通过BufferedOutputStream的缓存将数据写入磁盘中。

结语

使用GZIP格式可以方便快捷地对文件进行压缩和解压,从而提高文件传输效率。在Java中,我们可以轻松使用GZIPOutputStream和GZIPInputStream来实现这些操作。