压缩和解压缩java中的大型数据?

我需要压缩/解压缩文件夹中包含的不同类型的文件,该文件夹的大小可能超过10-11 GB。 我使用了以下代码,但这需要很长时间来压缩数据。

BufferedReader in = new BufferedReader(new FileReader("D:/ziptest/expansion1.MPQ")); BufferedOutputStream out = new BufferedOutputStream( new GZIPOutputStream(new FileOutputStream("test.gz"))); int c; while ((c = in.read()) != -1) out.write(c); in.close(); out.close(); 

请教我一些java中的快速压缩和解压缩库,我也想将大文件分成不同的部分,例如每个100MB的块。

Reader / Writer仅适用于Text,如果您尝试使用这些读取二进制文件,则会损坏。

相反,我建议你使用FileInputStream。 复制数据的最快方法是使用自己的缓冲区。

 InputStream in = new FileInputStream("D:/ziptest/expansion1.MPQ"); OutputStream out = new GZIPOutputStream( new BufferedOutputStream(new FileOutputStream("test.gz"))); byte[] bytes = new byte[32*1024]; int len; while((len = in.read(bytes)) > 0) out.write(bytes, 0, len); in.close(); out.close(); 

由于您读取大块字节,因此不会对BufferedInput / OuptuStream更有效,因为这会删除一个副本。 GZIPOutputStream之后有一个BufferedOutptuStream,因为您无法控制它生成的数据大小。

顺便说一句:如果你只是用Java阅读它,你可以使用DeflatorOutputStream,它稍微快一点,但只有Java AFAIK支持。