Make ZipFileTest#testHugeZipFile faster, and reduce ZipFile memory usage.
This test was timing out because of unbuffered I/O.
ZipFile was creating an unnecessary byte[] when writing out the central
directory. In the case of these tests, that was an extra 3MiB of heap!
(cherry-picked from a57c521b9d250f909508af771b96c0011676a968.)
Bug: 6481730
Change-Id: I923e563421056c9c0e73246357ccf54d8fb60cdb
diff --git a/luni/src/main/java/java/util/zip/ZipOutputStream.java b/luni/src/main/java/java/util/zip/ZipOutputStream.java
index 9a56fa2..47db8f6 100644
--- a/luni/src/main/java/java/util/zip/ZipOutputStream.java
+++ b/luni/src/main/java/java/util/zip/ZipOutputStream.java
@@ -248,8 +248,8 @@
} else {
writeShort(cDir, 0);
}
- // Write the central dir
- out.write(cDir.toByteArray());
+ // Write the central directory.
+ cDir.writeTo(out);
cDir = null;
}
diff --git a/luni/src/test/java/libcore/java/util/zip/ZipFileTest.java b/luni/src/test/java/libcore/java/util/zip/ZipFileTest.java
index b7a6050..7e8286e 100644
--- a/luni/src/test/java/libcore/java/util/zip/ZipFileTest.java
+++ b/luni/src/test/java/libcore/java/util/zip/ZipFileTest.java
@@ -16,6 +16,7 @@
package libcore.java.util.zip;
+import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -114,9 +115,9 @@
File result = File.createTempFile("ZipFileTest", "zip");
result.deleteOnExit();
- ZipOutputStream out = new ZipOutputStream(new FileOutputStream(result));
+ ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(result)));
for (int i = 0; i < count; ++i) {
- ZipEntry entry = new ZipEntry(Integer.toString(i));
+ ZipEntry entry = new ZipEntry(Integer.toHexString(i));
out.putNextEntry(entry);
out.closeEntry();
}