我在我的 Android Studio 项目中解压缩文件,如下所示:
InputStream is = ...
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is));
try {
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = zis.read(buffer)) != -1) {
baos.write(buffer, 0, count);
}
String filename = ze.getName();
byte[] bytes = baos.toByteArray();
// do something with 'filename' and 'bytes'...
}
} finally {
zis.close();
}
原始的 zip 文件大约是。30 MB 大,仅包含 *.txt 文件。其中两个文本文件大于 100 MB,因此我收到以下错误消息:
E/AndroidRuntime:致命异常:主进程:com.example.myapp,PID:15821 java.lang.OutOfMemoryError:无法分配 167083628 字节分配,其中 33542384 个空闲字节和 136MB 直到在 java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream .java:91) 在 java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 在 com.example.myapp.managers.UnzipManager.decompressZip(UnzipManager.java:104) 在 com.example.myapp.managers.UnzipManager。 (UnzipManager.java:43) 在 com.example.myapp.MyActivity.onCreate(MyActivity.java:103) 在 android.app.Activity.performCreate(Activity.java:6272) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation. java:1108) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 在 android。app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 在 android.os.android.app.ActivityThread.access$900(ActivityThread.java:157) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 在 android.os。 Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invoke (本机方法)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)1356) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 的 lang.reflect.Method.invoke(Native Method) )1356) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 的 lang.reflect.Method.invoke(Native Method) )
如何解压缩这些文件?