You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Plamen Totev (JIRA)" <ji...@apache.org> on 2017/05/13 22:05:04 UTC
[jira] [Created] (COMPRESS-395) Zip - Do not add data descriptor
record when CRC and size value are known
Plamen Totev created COMPRESS-395:
-------------------------------------
Summary: Zip - Do not add data descriptor record when CRC and size value are known
Key: COMPRESS-395
URL: https://issues.apache.org/jira/browse/COMPRESS-395
Project: Commons Compress
Issue Type: Improvement
Reporter: Plamen Totev
Priority: Minor
Hi,
Currently {{ZipArchiveOutputStream}} will add data descriptor record when the output do not provide random access. But if you add an entry using {{addRawArchiveEntry}} then the CRC, compressed size and uncompressed size could be know and there is no need for data descriptor record as those values could be set in the local file header. The current implementation does both - it sets the correct value in the local file header and adds additional data descriptor record. Here is the relevant code from {{ZipArchiveOutputStream#putArchiveEntry}}:
{code:java}
// just a placeholder, real data will be in data
// descriptor or inserted later via SeekableByteChannel
ZipEightByteInteger size = ZipEightByteInteger.ZERO;
ZipEightByteInteger compressedSize = ZipEightByteInteger.ZERO;
if (phased){
size = new ZipEightByteInteger(entry.entry.getSize());
compressedSize = new ZipEightByteInteger(entry.entry.getCompressedSize());
} else if (entry.entry.getMethod() == STORED
&& entry.entry.getSize() != ArchiveEntry.SIZE_UNKNOWN) {
// actually, we already know the sizes
size = new ZipEightByteInteger(entry.entry.getSize());
compressedSize = size;
}
z64.setSize(size);
z64.setCompressedSize(compressedSize);
{code}
Maybe {{ZipArchiveOutputStream}} could be improved to not add data descriptor record when the CRC and size values are known in advance.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)