java.util.zip.ZipOutputStream-快速压缩大型文件?
我想知道如何在我的android应用程序中加速40多个图像文件的压缩过程 客户端正在发送图像,在上传到服务器之前,需要将图像压缩或放入文件夹中。现在我使用下面的方法,但这样文件压缩只需20-30秒,而手机似乎被冻结,用户倾向于退出应用程序:( 我用于压缩的方法:java.util.zip.ZipOutputStream-快速压缩大型文件?,java,android,zip,buffer,large-files,Java,Android,Zip,Buffer,Large Files,我想知道如何在我的android应用程序中加速40多个图像文件的压缩过程 客户端正在发送图像,在上传到服务器之前,需要将图像压缩或放入文件夹中。现在我使用下面的方法,但这样文件压缩只需20-30秒,而手机似乎被冻结,用户倾向于退出应用程序:( 我用于压缩的方法: private static final int BUFFER_SIZE = 2048; public void zip(String[] files, String zipFile) throws IOException {
private static final int BUFFER_SIZE = 2048;
public void zip(String[] files, String zipFile) throws IOException {
File zipDirectory = new File(Environment.getExternalStorageDirectory()
+ "/laborator/");
if (!zipDirectory.exists()) {
zipDirectory.mkdirs();
} else {
System.out.println("folder already exists!");
}
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
new FileOutputStream(Environment.getExternalStorageDirectory()
+ "/laborator/" + zipFile)));
try {
byte data[] = new byte[BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER_SIZE);
try {
ZipEntry entry = new ZipEntry(files[i].substring(files[i]
.lastIndexOf("/") + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
out.write(data, 0, count);
}
} finally {
origin.close();
}
}
} finally {
out.close();
System.out.println("ziping done");
sendZip();
}
}
private static final int BUFFER_SIZE=2048;
公共void zip(字符串[]文件,字符串zipFile)引发IOException{
File zipddirectory=新文件(Environment.getExternalStorageDirectory())
+“/laborator/”;
如果(!zipDirectory.exists()){
zipDirectory.mkdirs();
}否则{
System.out.println(“文件夹已存在!”);
}
BufferedInputStream原点=null;
ZipOutputStream out=新ZipOutputStream(新缓冲输出流(
新的FileOutputStream(Environment.getExternalStorageDirectory()
+“/laborator/”+zipFile));
试一试{
字节数据[]=新字节[缓冲区大小];
对于(int i=0;i
由于您的图像是JPG格式的,因此您很可能无法在ZIP文件中获得任何适当的压缩。因此,您可以尝试将未压缩的图像放入ZIP文件,这样在不增加ZIP文件大小的情况下,压缩速度应该会大大加快:
ZipEntry entry = new ZipEntry(files[i].subs...
entry.setMethod(ZipEntry.STORED);
out.putNextEntry(entry);
你可以用
out.setLevel(Deflater.NO_COMPRESSION);
这样就不需要更改ZipEntry。你有什么图像类型:jpg、GIF、PNG等?@wero这些文件都是jpg.Thaaankkss!还有一个问题,如果我调整大小并逐个上传每个文件,会怎么样?我遇到过zips损坏的情况,或者当outOfMemory出现时,这样就不会出现任何错误。但是Uploa一个接一个会更安全,你觉得怎么样?谢谢!发送一个文件可能比发送40个不同的文件快,除非它不需要考虑。有很多事情要考虑,但最终它的权衡取决于你的应用程序。为什么不去执行一个策略——当它真的不起作用时,寻找ALTE。R活动。问题是,这已经是一个生产应用程序。我在过去几天中遇到的问题:1.损坏的zip,2.缺少存档中的图像,3.完全缺少服务器中的存档:(仅在某些情况下。为什么不起草另一个问题来解决这些问题?评论是一个不好讨论的地方。请记住,如果使用ZipEntry.storage,还必须手动设置ZipEntry的CRC和大小。