我需要压缩/解压缩文件夹中包含的不同类型的文件,该文件夹的大小可能超过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的块。
发布于 2011-08-05 18:55:06
Reader/Writer仅用于文本,如果您尝试使用这些读取二进制文件,将会损坏。
相反,我建议您使用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支持。
https://stackoverflow.com/questions/6955049
复制相似问题