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();
           }