java.util.zip.ZipOutputStream - 更快地压缩大文件?
java.util.zip.ZipOutputStream - Zipping large files faster?
我想知道如何在我的 android 应用程序中加快 40 多个图像文件的压缩过程。
客户端正在发送图片,在上传到服务器之前需要将图片压缩或放入文件夹中。现在我使用波纹管方法,但这种方式文件在大约 20-30 秒内被压缩,而 phone 似乎被冻结并且用户倾向于退出应用程序:(
我使用的压缩方法:
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();
}
}
由于您的图像是 jpg,因此很有可能您在 ZIP 文件中没有得到任何合适的压缩。因此,您可以尝试将未压缩的图像放入 ZIP 文件中,这样在不增加 ZIP 文件大小的情况下速度应该相当快:
ZipEntry entry = new ZipEntry(files[i].subs...
entry.setMethod(ZipEntry.STORED);
out.putNextEntry(entry);
你可以使用
out.setLevel(Deflater.NO_COMPRESSION);
这样就不需要更改 ZipEntry。
我想知道如何在我的 android 应用程序中加快 40 多个图像文件的压缩过程。
客户端正在发送图片,在上传到服务器之前需要将图片压缩或放入文件夹中。现在我使用波纹管方法,但这种方式文件在大约 20-30 秒内被压缩,而 phone 似乎被冻结并且用户倾向于退出应用程序:(
我使用的压缩方法:
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();
}
}
由于您的图像是 jpg,因此很有可能您在 ZIP 文件中没有得到任何合适的压缩。因此,您可以尝试将未压缩的图像放入 ZIP 文件中,这样在不增加 ZIP 文件大小的情况下速度应该相当快:
ZipEntry entry = new ZipEntry(files[i].subs...
entry.setMethod(ZipEntry.STORED);
out.putNextEntry(entry);
你可以使用
out.setLevel(Deflater.NO_COMPRESSION);
这样就不需要更改 ZipEntry。