前面的一篇文章说明了压缩以及解压缩,但是对于字节流的分析表示,上次的压缩满足不了(或者说满足起来显得复杂)现在开发要求,及我们可以直接从压缩文件中读取到文件大小以及压缩文件大小,方便直接解析使用。
上次采用的基本上是存储模式压缩,不记录文件的大小以及压缩文件大小。改变后采用真正的压缩模式压缩,采用zip给定的压缩算法实现。
具体的压缩代码。
final static public void zip(String srcfile, String destfile) {
try {
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
new FileOutputStream(destfile)));
File f = new File(srcfile);
Vector v = new Vector();
v = parse(f.listFiles(), v);
File file = null;
String path = null;
ZipEntry entry = null;
byte[] data = null;
CRC32 crc = null;
for (int i = 0; i < v.size(); i++) {
file = (File) v.elementAt(i);
path = path(srcfile, file.getAbsolutePath());
if (file.isFile()) {
origin = new BufferedInputStream(new FileInputStream(file),
BUFFER);
entry = new ZipEntry(path);
data = new byte[origin.available()];
origin.read(data);
byte[] deflater = new byte[1000];
Deflater de = new Deflater(Deflater.DEFAULT_COMPRESSION,
true);
de.setInput(data);
de.finish();
de.deflate(deflater, 0, deflater.length);
entry.setMethod(ZipEntry.DEFLATED);
entry.setSize(de.getBytesRead());
entry.setCompressedSize(de.getBytesWritten());
crc = new CRC32();
crc.update(data);
entry.setCrc(crc.getValue());
out.setMethod(ZipOutputStream.DEFLATED);
out.setLevel(Deflater.DEFAULT_COMPRESSION);
out.putNextEntry(entry);
out.write(data, 0, data.length);
} else {
entry = new ZipEntry(path + "/");
out.putNextEntry(entry);
}
out.flush();
out.closeEntry();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
其余部分代码参见http://gao-20022002.iteye.com/blog/271319
,这篇文章只是改进了压缩实现。
关于zip文件的压缩算法,具体参见http://gao-20022002.iteye.com/blog/273714
。
分享到:
相关推荐
接下来,"zip压缩"在这里的作用是将捕获的崩溃信息整合成一个紧凑的文件,方便传输和存储。Zip是一种常用的文件压缩格式,可以有效减少文件大小,同时保持文件内容的完整性和可读性。 最后,"邮件发送"功能确保了...
在这个场景中,"lzw_soft.zip"可能包含了用某种编程语言实现的LZW压缩和解压缩的源代码。源代码可以帮助我们理解算法的工作原理,也可以用于在不同的应用中集成LZW压缩功能。 在压缩包的文件列表中,我们有两个文本...
在这个特定的压缩包中,我们关注的焦点在于源码实现、文件拖放功能、弹性滚动列表、root权限以及ZIP压缩与解压功能。下面我们将逐一探讨这些知识点。 首先,"文件管理器源码"是指用于构建一个能够浏览、操作文件和...
标题 "新建 360压缩 ZIP 文件.zip_lcd160251程序_unclee2j_zip" 提到的核心是关于51单片机C语言控制LCD1602显示屏的程序,作者为unclee2j。这个压缩包可能包含了一个项目工程文件,用于指导用户如何在51系列单片机上...
标题中的"upx-3.94-src.zip"指的是UPX 3.94版本的源代码压缩包,适合Linux平台,用于创建所谓的"压缩壳",即在程序的原始二进制代码周围添加一层额外的代码,以实现文件的压缩和加壳。 **UPX介绍** UPX最初由...
在现代3D建模、自动驾驶、无人机测绘、虚拟现实等领域,点云数据的处理和分析扮演着至关重要的角色。由于点云数据通常非常庞大,直接存储和传输会消耗大量的存储空间和网络带宽,因此点云压缩技术应运而生。 点云...
"Algorithm-zmolly.zip" 提供的是一种高压缩比的PPM( Prediction by Partial Matching)压缩机,这在数据存储和传输中具有极大的实用价值。本文将深入探讨PPM算法以及它如何实现高效压缩。 PPM算法,全称为部分...
通过使用这些测试文件,开发者或网络工程师可以细致地分析在网络环境下,ZIP文件的传输完整性、速度以及压缩与解压的效率。尤其在那些网络带宽有限或者存在高延迟的环境中,这类测试显得尤为重要。它们帮助开发人员...
这个压缩文件“连云港2013年度继续教育考试.zip”很可能包含了当年考试的相关材料,如考试大纲、试题、答案解析或考生指南等。 【描述】:“连云港2013年度继续教育考试.zip”的描述简洁明了,直接点出了文件的主题...
【描述】:“幼儿园教师继续教育的现状与对策思考.zip”这个压缩包内含的文档详细分析了当前幼儿园教师在继续教育过程中可能遇到的挑战,包括教育资源的分配不均、教育理念的更新滞后、教师培训的质量参差不齐等。...
在上述场景中,我们讨论的是如何使用Shell脚本来实现上传zip压缩文件到FTP(File Transfer Protocol)服务器的任务。FTP是一种网络协议,允许用户在两台计算机之间传输文件,尤其在Web开发和系统管理中广泛使用。 ...
学生需要继续完成剩余部分,如详细设计、实验验证、经济分析和结论总结等。 总的来说,这个毕业设计涵盖了多学科的知识,既需要扎实的理论基础,也需要一定的工程实践能力。完成这样的项目,不仅能够提升学生的专业...
使用`save`命令可以将MATLAB工作区中的变量保存到.mat文件,以便日后加载和继续分析。这一步可能是IFC数据预处理、分析或可视化过程的一部分。 在MATLAB中编程处理IFC文件,首先需要了解IFC的数据结构和标准,然后...
但是,由于专利问题,现在已经被其他无版权的压缩算法如DEFLATE(用于ZIP和PNG)所取代。 - LZW在某些情况下表现优秀,特别是在处理包含大量重复模式的数据时。然而,对于没有明显重复模式的数据,其他算法如...
在压缩文件时,我们可以利用`ZipOutputStream`类来创建ZIP格式的压缩文件,通过写入各个文件或字节数组来添加到压缩文件中。例如,我们可以通过以下步骤实现: 1. 创建一个`ZipOutputStream`对象,将它连接到目标...
在数字时代,文件压缩已成为日常工作中不可或缺的一部分。...在未来的数字化工作中,我们应当继续关注文件压缩、格式化和安全管理等领域的最新发展,以提高我们的工作效率,同时保护我们的信息不受侵害。
在这种情况下,可以编写一个递归函数,通过检查每个解压后的文件是否仍然是ZIP文件,如果是,则继续解压并处理其中的压缩文件。这种方式在处理包含嵌套压缩文件的场景时非常有用。 【数据解析与文件处理】 Python...
标题"继续教育工匠精神2018年考试试题及答案.zip"表明这是一份关于"工匠精神"主题的考试材料,属于2018年度的继续教育课程。"继续教育"通常是指针对专业人士或在职员工进行的进一步学习和提升,旨在更新知识、技能和...
《年会计继续教育考试答案.zip》是一个压缩文件,其中包含了“年会计继续教育考试答案.doc”。这个文件很显然是为会计专业人员准备的,用于解答年度会计继续教育考试的相关问题。会计继续教育是针对已取得会计资格...