首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中压缩和解压大数据?

在java中压缩和解压大数据?
EN

Stack Overflow用户
提问于 2011-08-05 18:43:29
回答 1查看 4.4K关注 0票数 1

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

代码语言:javascript
复制
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的块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-05 18:55:06

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

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

代码语言:javascript
复制
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支持。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6955049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档