diff options
author | Felipe Leme <felipeal@google.com> | 2015-06-16 10:25:06 -0700 |
---|---|---|
committer | Felipe Leme <felipeal@google.com> | 2015-06-16 10:32:45 -0700 |
commit | 00f4a6ecbca4a0286c7f283850e1af3c424818a0 (patch) | |
tree | 6689d1aeceea543f91a3db0cf30691337b600012 /packages | |
parent | a106554c20c72e284d64ea074933554e5dc29da9 (diff) | |
download | frameworks_base-00f4a6ecbca4a0286c7f283850e1af3c424818a0.zip frameworks_base-00f4a6ecbca4a0286c7f283850e1af3c424818a0.tar.gz frameworks_base-00f4a6ecbca4a0286c7f283850e1af3c424818a0.tar.bz2 |
Improved zipping logic so it zips chunks, instead of the whole file at once, to avoid OOM.
BUG: 20447313
Change-Id: I66f90cdd2a07288f9e37a38185f1583c57cf65c8
Diffstat (limited to 'packages')
-rw-r--r-- | packages/Shell/src/com/android/shell/BugreportReceiver.java | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/packages/Shell/src/com/android/shell/BugreportReceiver.java b/packages/Shell/src/com/android/shell/BugreportReceiver.java index d299d66..13747ed 100644 --- a/packages/Shell/src/com/android/shell/BugreportReceiver.java +++ b/packages/Shell/src/com/android/shell/BugreportReceiver.java @@ -37,6 +37,7 @@ import android.util.Log; import android.util.Patterns; import com.google.android.collect.Lists; +import libcore.io.Streams; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; @@ -191,20 +192,17 @@ public class BugreportReceiver extends BroadcastReceiver { * original in case of failure). */ private static File zipBugreport(File bugreportFile) { - byte[] bytes = read(bugreportFile); - if (bytes == null) { - // Could not read bugreport, return original. - return bugreportFile; - } String bugreportPath = bugreportFile.getAbsolutePath(); String zippedPath = bugreportPath.replace(".txt", ".zip"); Log.v(TAG, "zipping " + bugreportPath + " as " + zippedPath); File bugreportZippedFile = new File(zippedPath); - try (ZipOutputStream zos = new ZipOutputStream( + try (InputStream is = new FileInputStream(bugreportFile); + ZipOutputStream zos = new ZipOutputStream( new BufferedOutputStream(new FileOutputStream(bugreportZippedFile)))) { ZipEntry entry = new ZipEntry("bugreport.txt"); zos.putNextEntry(entry); - zos.write(bytes); + int totalBytes = Streams.copy(is, zos); + Log.v(TAG, "size of original bugreport: " + totalBytes + " bytes"); zos.closeEntry(); // Delete old file; boolean deleted = bugreportFile.delete(); @@ -220,22 +218,6 @@ public class BugreportReceiver extends BroadcastReceiver { } } - /** Returns the content of file, or {@code null} in case of error. */ - private static byte[] read(File file) { - try (ByteArrayOutputStream output = new ByteArrayOutputStream(); - InputStream input = new FileInputStream(file)) { - byte[] buffer = new byte[4096]; - int read = 0; - while ((read = input.read(buffer)) != -1) { - output.write(buffer, 0, read); - } - return output.toByteArray(); - } catch (IOException e) { - Log.e(TAG, "IOException reading " + file.getAbsolutePath(), e); - return null; - } - } - /** * Find the best matching {@link Account} based on build properties. */ |