次のように、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 ファイルのみが含まれます。これらのテキスト ファイルのうち 2 つは 100 MB を超えているため、次のエラー メッセージが表示されます。
E/AndroidRuntime: FATAL EXCEPTION: main プロセス: com.example.myapp、PID: 15821 java.lang.OutOfMemoryError: 167083628 バイトの割り当てを 33542384 の空きバイトと 136MB で OOM で 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.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) の lang.reflect.Method.invoke(ネイティブ メソッド) 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) の lang.reflect.Method.invoke(ネイティブ メソッド) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) の)
これらのファイルを適切に解凍するにはどうすればよいですか?