Override ZipOutputStream.write(int)master
| @@ -166,6 +166,7 @@ Grégoire Vatry | |||||
| Günther Kögel | Günther Kögel | ||||
| Harish Prabandham | Harish Prabandham | ||||
| Haroon Rafique | Haroon Rafique | ||||
| Helder Pereira | |||||
| Hiroaki Nakamura | Hiroaki Nakamura | ||||
| Holger Engels | Holger Engels | ||||
| Holger Joest | Holger Joest | ||||
| @@ -696,6 +696,10 @@ | |||||
| <first>Haroon</first> | <first>Haroon</first> | ||||
| <last>Rafique</last> | <last>Rafique</last> | ||||
| </name> | </name> | ||||
| <name> | |||||
| <first>Helder</first> | |||||
| <last>Pereira</last> | |||||
| </name> | |||||
| <name> | <name> | ||||
| <first>Hiroaki</first> | <first>Hiroaki</first> | ||||
| <last>Nakamura</last> | <last>Nakamura</last> | ||||
| @@ -325,6 +325,11 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
| private final Calendar calendarInstance = Calendar.getInstance(); | private final Calendar calendarInstance = Calendar.getInstance(); | ||||
| /** | |||||
| * Temporary buffer used for the {@link #write(int)} method. | |||||
| */ | |||||
| private final byte[] oneByte = new byte[1]; | |||||
| /** | /** | ||||
| * Creates a new ZIP OutputStream filtering the underlying stream. | * Creates a new ZIP OutputStream filtering the underlying stream. | ||||
| * @param out the outputstream to zip | * @param out the outputstream to zip | ||||
| @@ -901,6 +906,19 @@ public class ZipOutputStream extends FilterOutputStream { | |||||
| return ZipUtil.canHandleEntryData(ae); | return ZipUtil.canHandleEntryData(ae); | ||||
| } | } | ||||
| /** | |||||
| * Writes a byte to ZIP entry. | |||||
| * | |||||
| * @param b the byte to write | |||||
| * @throws IOException on error | |||||
| * @since Ant 1.10.10 | |||||
| */ | |||||
| @Override | |||||
| public void write(int b) throws IOException { | |||||
| oneByte[0] = (byte) (b & 0xff); | |||||
| write(oneByte, 0, 1); | |||||
| } | |||||
| /** | /** | ||||
| * Writes bytes to ZIP entry. | * Writes bytes to ZIP entry. | ||||
| * | * | ||||
| @@ -21,8 +21,14 @@ package org.apache.tools.zip; | |||||
| import org.junit.Before; | import org.junit.Before; | ||||
| import org.junit.Test; | import org.junit.Test; | ||||
| import java.io.ByteArrayInputStream; | |||||
| import java.io.ByteArrayOutputStream; | |||||
| import java.io.IOException; | |||||
| import java.util.Calendar; | import java.util.Calendar; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.jar.JarFile; | |||||
| import java.util.jar.Manifest; | |||||
| import java.util.zip.ZipInputStream; | |||||
| import static org.junit.Assert.assertEquals; | import static org.junit.Assert.assertEquals; | ||||
| @@ -70,4 +76,18 @@ public class ZipOutputStreamTest { | |||||
| ZipUtil.adjustToLong(2 * Integer.MAX_VALUE)); | ZipUtil.adjustToLong(2 * Integer.MAX_VALUE)); | ||||
| } | } | ||||
| @Test | |||||
| public void testWriteAndReadManifest() throws IOException { | |||||
| try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { | |||||
| try (ZipOutputStream zos = new ZipOutputStream(baos)) { | |||||
| zos.putNextEntry(new ZipEntry(JarFile.MANIFEST_NAME)); | |||||
| new Manifest().write(zos); | |||||
| } | |||||
| try (ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); | |||||
| ZipInputStream zis = new ZipInputStream(bais)) { | |||||
| zis.getNextEntry(); | |||||
| zis.closeEntry(); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | } | ||||