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