我正在生成一个大小为1 GB的文件,现在我必须通过java本身压缩这个文件。
FileOutputStream fileOutput = new FileOutputStream(
file);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
fileOutput));
addContent(abc, def, bw);
bw.close();
fileOutput.close();
请告知我正在寻找一个自定义方法,该方法将接受文件名和文件路径作为参数并将压缩文件,如下所示:
public void generatezipforafie( folderpath, filename)
{
//please advise the logic to zip the file
}
答案 0 :(得分:1)
我假设你的“有效”一词意味着尽可能快。您可以使用GZIPOutpuStream压缩一个大文件或ZipOutputStream来压缩文件数量并将它们连接成一个zip库。两者都在标准的javadocs中得到了很好的解释。
长话短说,为了提高效率 - 同时使用更多CPU - 将大文件分成块,让不同的线程同时压缩它们并连接输出。在接收方面,反之亦然。
标准zip类的一个缺点是两个都只在一个CPU /核上运行单线程。所以他们可能没有效率。这是因为压缩算法本身是单线程的。现有的并行化版本获取数据块并将其压缩到不同的线程中。然后他们有相应的解压逻辑。您可以通过在网上搜索PIGZ找到大量关于此的材料。
根据@VictorSeifert的评论进行编辑
压缩比主要取决于三件事:您的数据(显然),压缩的深度和块大小。可以使用setLevel()
在java类中控制压缩深度。块大小可以自由选择。块越大,压缩越好,但可以实现的并行性越小。