压缩解压性能探究
最近正在做一个项目,最终需要通过JAVA将一部分内容打包通过FTP上传到另外一台服务器上,当时压缩方法是这么做的:(先帖一个Test)
public class Test {
public static void main(String[] args) {
try {
Date date1 = new Date();
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("test.zip"));
File inputFile = new File("d://test");
new Test().zip(out, inputFile, "");
out.close();
Date date2 = new Date();
System.out.println("耗时:"+(date2.getTime()-date1.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
}
private void zip(ZipOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}
}
使用这种压缩方式效率极其低下,为了使效率提高,我先后发现了两种方法,第一种方法是利用BufferedInputStream和BufferedOutputStream对文件流进行包装,具体代码如下:
private void zip(ZipOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
BufferedOutputStream bou = new BufferedOutputStream(out);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
int b;
while ((b = in.read()) != -1) {
bou.write(b);
}
in.close();
bou.flush();
}
}
虽然第二种方式使用之后速度得到明显提升,但第三种方式较第二种还快了几倍,那就是在读写的时候增加每次读写量,具体代码如下:
private void zip(ZipOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] bs = new byte[10240];
int b;
while ((b = in.read(bs)) != -1) {
out.write(bs, 0, b);
}
in.close();
}
}
目前就我测试的结果看,第三种方式是最快的,不知道各位博友有没有更快的方式,欢迎大家一起过来探讨。
分享到:
相关推荐
标题中的“FLASH压缩解压工具.exe”是一款专为处理Flash(SWF)文件设计的实用程序,它提供了压缩和解压缩的功能。Flash是一种广泛应用于网页动画、游戏开发和交互式内容设计的格式。这款工具的独特之处在于它能够...
在使用这个程序集时,研究人员可以对各种信号进行同步压缩小波变换,探究其性能和适用范围。例如,可以分析信号的频率特性,识别噪声成分,或者用于图像的无损或有损压缩。此外,该程序也适用于信号的去噪处理,通过...
然而,对于最佳缓存字节数的选择并未深入探究,这是未来可以优化的一个方向。 在处理文件读写时,学生遇到了不同编程语言库的兼容性问题。在C++的fstream库中,对于中文文件名和包含空格的路径支持不够友好,而...
"ext 包,解压就用"这个标题和描述提到了一个名为"ext"的工具,版本为2.0,且特别强调了它的解压缩功能。我们可以推断这是一个专用于处理压缩文件的软件或者库,可能适用于不同的操作系统或开发环境。在IT行业中,...
【标题】"steamcommunity_302_V10.6_解压密码dogfight360.zip" 提供的信息表明,这是一个与Steam社区相关的压缩文件,版本为V10.6,可能包含了一些更新或者资源...具体的内容则需要根据解压后的文件内容来进一步探究。
总的来说,"世界大赛第一名的程序.rar"是一个值得探究的压缩文件,里面包含的程序不仅体现了高水平的编程技艺,还展现了创新的游戏设计理念。对于程序员、游戏开发者以及游戏爱好者来说,研究这个程序可能会带来诸多...
《深入理解MPQTOOL:源码解析与应用探索》 ...同时,这也是一次深入探究二进制文件格式和数据压缩技术的好机会。如果你对游戏开发、数据恢复或文件系统有浓厚兴趣,那么MPQTOOL的源码绝对值得一探究竟。
9. **无密码解压**:在描述中提到“无密码解压”,这意味着 Binary Viewer 可能支持打开受密码保护的压缩文件,或者至少能查看其中的二进制内容,尽管可能无法编辑或提取文件。 使用 Binary Viewer 进行二进制文件...
【解压缩步骤】要获取 TMDSnake3D 的源码,首先需要在命令行环境中运行以下命令来解压 .bz2 文件: ```bash bzip2 -dk TMDSnake3D-1.0.tar.bz2 ``` 这会生成一个未压缩的 .tar 文件。接着,使用以下命令解压 tar ...
与ZIP格式相比,RAR通常能提供更为优秀的压缩性能,使其成为存储大量文件时的首选。 当我们遇到一个名为“shark(1).rar”的文件时,首先映入眼帘的是文件名中的“shark”,这在没有额外上下文的情况下,可以引发多...
但根据上下文,我们可以推测“1111”可能是测试用例的输入数据、日志文件,或者是一个临时文件名,具体用途需要实际解压文件后查看。 在学习或分析这个压缩包时,我们可以关注以下几个方面: 1. **理解树数据结构*...
3. **优化技巧**:探究性能优化的实现方法,如循环展开、内联函数等。 4. **调试经验**:了解库函数的内部工作流程,有助于定位和解决程序问题。 总之,glibc-2.9不仅是一个强大的工具,也是提升C语言编程能力的...
4. **解压缩操作**:使用`unzipFileAtPath:toPath:error:`方法,传入ZIP文件路径和解压目标路径。 5. **错误检查**:每次操作后检查返回值或错误对象,以便捕获并处理可能出现的问题。 6. **清理**:操作完成后,...
首先,7z的压缩算法基于LZMA(Lempel-Ziv-Markov chain Algorithm),这是一种高效的数据压缩算法,具有高压缩比和较快的解压速度。LZMA的核心在于寻找重复的字符串模式并用短编码替换,以减少存储空间。在7z 460源...
5. **性能测试**:学习如何衡量和比较不同压缩设置下的性能,包括压缩速度、解压速度和图像质量指标(如PSNR、SSIM等)。 6. **问题解决**:通过与博主的沟通,提升问题解决能力,理解在实际项目中可能遇到的问题...
由Eugene Roshal开发的RAR格式,以其高效的压缩性能和稳定的兼容性,在IT领域广泛应用。了解RAR文件的创建、解压和管理,成为了每个希望在数字世界中游刃有余的人的基本技能。它不仅可以节省存储空间,还能通过压缩...
4. **性能影响**:虽然ASPack能显著减小程序大小,但压缩过程可能会导致程序运行速度变慢,因为需要额外的时间来解压代码。不过,ASPack的设计尽量减少了这种负面影响。 5. **汉化版的优势**:对于中文用户来说,...
解压是将压缩的文件恢复到其原始状态的过程,通常使用像WinRAR或7-Zip这样的压缩工具。解压后,你将获得一系列文件和目录,这些可能包括源代码文件、文档、库文件以及安装程序。 寻找"安装文件"是安装过程的关键...
第二类是通过碟形天线接收卫星信号的直播技术,可避免中间传输环节的干扰,但需要对数字信号进行压缩和解压,增加了处理复杂度。 - **直播传输系统的特点**:直播传输系统具有鲁棒性强的特点,适应各种设备需求。...
编码器和解码器通常成对出现,用于音频的压缩和解压。这个文件可能包含了将音频数据转换为各种格式的功能,使得用户不仅可以解码,还能进行编码操作,实现音频文件的自由转换。 总的来说,啄木鸟解码器1.00凭借其...