final @Nullable ExtraField removeExtraField(final int headerId) { final ExtraFields fields = this.fields; return null != fields ? fields.remove(headerId) : null; }
/** * @throws IllegalArgumentException if the serialized extra fields do not * conform to the ZIP File Format Specification. */ private void setExtraFields(final byte[] buf, final boolean zip64) throws IllegalArgumentException { assert UShort.check(buf.length); if (0 < buf.length) { final ExtraFields fields = new ExtraFields(); try { fields.readFrom(buf, 0, buf.length); if (zip64) parseZip64ExtraField(fields); } catch (final IndexOutOfBoundsException ex) { throw new IllegalArgumentException(ex); } fields.remove(ZIP64_HEADER_ID); this.fields = 0 < fields.size() ? fields : null; } else { this.fields = null; } }
@Test public void testCollection0() { fields.readFrom(serialized, 0, serialized.length); final ExtraField ef = fields.get(ExtraField.ZIP64_HEADER_ID); assertNotNull(ef); assertSame(ef, fields.remove(ExtraField.ZIP64_HEADER_ID)); assertNull(fields.get(ExtraField.ZIP64_HEADER_ID)); assertNull(fields.add(ef)); final byte[] got = fields.getExtra(); assertNotSame(serialized, got); assertTrue(Arrays.equals(serialized, got)); }
@Test public void testCollection1() { assertEquals(0, fields.getExtra().length); final ExtraField ef = new DefaultExtraField(ExtraField.ZIP64_HEADER_ID); assertNull(fields.get(ExtraField.ZIP64_HEADER_ID)); assertNull(fields.add(ef)); byte[] got = fields.getExtra(); assertEquals(4 + ef.getDataSize(), got.length); assertSame(ef, fields.remove(ExtraField.ZIP64_HEADER_ID)); assertEquals(0, fields.getExtra().length); } }