IOUtils.readFully(archive, cfhBbuf); int off = 0; final Entry ze = new Entry(); ze.setVersionMadeBy(versionMadeBy); ze.setPlatform((versionMadeBy >> BYTE_SHIFT) & NIBLET_MASK); ze.setVersionRequired(ZipShort.getValue(cfhBuf, off)); hasUTF8Flag ? ZipEncodingHelper.UTF8_ZIP_ENCODING : zipEncoding; if (hasUTF8Flag) { ze.setNameSource(ZipArchiveEntry.NameSource.NAME_WITH_EFS_FLAG); ze.setGeneralPurposeBit(gpFlag); ze.setRawFlag(ZipShort.getValue(cfhBuf, off)); ze.setMethod(ZipShort.getValue(cfhBuf, off)); off += SHORT; ze.setTime(time); off += WORD; ze.setCrc(ZipLong.getValue(cfhBuf, off)); off += WORD; ze.setCompressedSize(ZipLong.getValue(cfhBuf, off)); off += WORD; ze.setSize(ZipLong.getValue(cfhBuf, off));
final long offset = ze.getLocalHeaderOffset(); archive.position(offset + LFH_OFFSET_FOR_FILENAME_LENGTH); wordBbuf.rewind(); final byte[] localExtraData = new byte[extraFieldLen]; IOUtils.readFully(archive, ByteBuffer.wrap(localExtraData)); ze.setExtra(localExtraData); ze.setDataOffset(offset + LFH_OFFSET_FOR_FILENAME_LENGTH + SHORT + SHORT + fileNameLen + extraFieldLen); ze.setStreamContiguous(true); final String name = ze.getName(); LinkedList<ZipArchiveEntry> entriesOfThatName = nameMap.get(name); if (entriesOfThatName == null) {
IOUtils.readFully(archive, cfhBbuf); int off = 0; final Entry ze = new Entry(); ze.setVersionMadeBy(versionMadeBy); ze.setPlatform((versionMadeBy >> BYTE_SHIFT) & NIBLET_MASK); ze.setVersionRequired(ZipShort.getValue(cfhBuf, off)); hasUTF8Flag ? ZipEncodingHelper.UTF8_ZIP_ENCODING : zipEncoding; if (hasUTF8Flag) { ze.setNameSource(ZipArchiveEntry.NameSource.NAME_WITH_EFS_FLAG); ze.setGeneralPurposeBit(gpFlag); ze.setRawFlag(ZipShort.getValue(cfhBuf, off)); ze.setMethod(ZipShort.getValue(cfhBuf, off)); off += SHORT; ze.setTime(time); off += WORD; ze.setCrc(ZipLong.getValue(cfhBuf, off)); off += WORD; ze.setCompressedSize(ZipLong.getValue(cfhBuf, off)); off += WORD; ze.setSize(ZipLong.getValue(cfhBuf, off));
final long offset = ze.getLocalHeaderOffset(); archive.position(offset + LFH_OFFSET_FOR_FILENAME_LENGTH); wordBbuf.rewind(); final byte[] localExtraData = new byte[extraFieldLen]; IOUtils.readFully(archive, ByteBuffer.wrap(localExtraData)); ze.setExtra(localExtraData); ze.setDataOffset(offset + LFH_OFFSET_FOR_FILENAME_LENGTH + SHORT + SHORT + fileNameLen + extraFieldLen); ze.setStreamContiguous(true); final String name = ze.getName(); LinkedList<ZipArchiveEntry> entriesOfThatName = nameMap.get(name); if (entriesOfThatName == null) {
@Override public int compare(final ZipArchiveEntry e1, final ZipArchiveEntry e2) { if (e1 == e2) { return 0; } final Entry ent1 = e1 instanceof Entry ? (Entry) e1 : null; final Entry ent2 = e2 instanceof Entry ? (Entry) e2 : null; if (ent1 == null) { return 1; } if (ent2 == null) { return -1; } final long val = (ent1.getLocalHeaderOffset() - ent2.getLocalHeaderOffset()); return val == 0 ? 0 : val < 0 ? -1 : +1; } };
@Override public boolean equals(final Object other) { if (super.equals(other)) { // super.equals would return false if other were not an Entry final Entry otherEntry = (Entry) other; return getLocalHeaderOffset() == otherEntry.getLocalHeaderOffset() && getDataOffset() == otherEntry.getDataOffset(); } return false; } }
@Override public int hashCode() { return 3 * super.hashCode() + (int) getLocalHeaderOffset()+(int)(getLocalHeaderOffset()>>32); }
@Override public int compare(final ZipArchiveEntry e1, final ZipArchiveEntry e2) { if (e1 == e2) { return 0; } final Entry ent1 = e1 instanceof Entry ? (Entry) e1 : null; final Entry ent2 = e2 instanceof Entry ? (Entry) e2 : null; if (ent1 == null) { return 1; } if (ent2 == null) { return -1; } final long val = (ent1.getLocalHeaderOffset() - ent2.getLocalHeaderOffset()); return val == 0 ? 0 : val < 0 ? -1 : +1; } };
@Override public boolean equals(final Object other) { if (super.equals(other)) { // super.equals would return false if other were not an Entry final Entry otherEntry = (Entry) other; return getLocalHeaderOffset() == otherEntry.getLocalHeaderOffset() && getDataOffset() == otherEntry.getDataOffset(); } return false; } }
@Override public int hashCode() { return 3 * super.hashCode() + (int) getLocalHeaderOffset()+(int)(getLocalHeaderOffset()>>32); }