以不定长字节序列的方式压缩一个文件,采用什么算法比较好?

发布于 2021-11-25 15:04:33 字数 477 浏览 967 评论 2

需要对一个大文件进行压缩,这个大文件文件是通过网络进行接收的。

需求是:服务器先收到多少字节就先对这些字节进行压缩,写入另外一个压缩文件。

这里的字节将会是不定长的,有时候多,有时候少(因为是通过网络传输的)。

并且解压缩的时候也能按不定长的方式解压缩,返回给客户端。

请问我该选用什么算法?

之所以有这个需求是因为:把一整个文件接收完全再进行压缩的话会导致一个OutOfMemory(如果文件很大的话)。

或者如果你有更好的避免内存溢出的方法,请告诉我,这样我们就可以避免一个X-Y Problem,谢谢^_^....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠檬 2021-11-28 00:33:53

管道压缩

可是我不能没有你 2021-11-27 17:20:54

将整个文件接收之后压缩是不是没有使用缓存?要不然不会出现内存溢出的情况:

FileInputStream fin = new FileInputStream("archive.tar.gz");
BufferedInputStream in = new BufferedInputStream(fin);
FileOutputStream out = new FileOutputStream("archive.tar");
GZipCompressorInputStream gzIn = new GZipCompressorInputStream(in);
final byte[] buffer = new byte[buffersize];
int n = 0;
while (-1 != (n = gzIn.read(buffer))) {
    out.write(buffer, 0, n);
}
out.close();
gzIn.close();

http://commons.apache.org/proper/commons-compress/examples.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文