[Issue 2137] New: Data not compressed on fly when adding to zip archive

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Jun 2 13:23:45 PDT 2008


http://d.puremagic.com/issues/show_bug.cgi?id=2137

           Summary: Data not compressed on fly when adding to zip archive
           Product: D
           Version: 2.014
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: minor
          Priority: P2
         Component: Phobos
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: dsimcha at yahoo.com


The fact that, when an ArchiveMember is added via addMember() to a ZipArchive,
the data in expandedData is not compressed on the fly, makes it very difficult
to create large zip files without running out of memory.  I have created a
simple workaround  by moving the following code from the build() method to the
addMember() method:

de.crc32 = std.zlib.crc32(0, cast(void[])de.expandedData);
de.compressedData =
cast(ubyte[])std.zlib.compress(cast(void[]))de.expandedData;
de.compressedData = de.compressedData[2 .. de.compressedData.length - 4];
de.compressedSize = de.compressedData.length;
de.expandedSize = de.expandedData.length;

I also added the following to free the memory previously occupied by
expandedData:

de.expandedData=null;

This is actually proving to be a significant issue for me, as I am attempting
to use std.zip to archive large amounts of DNA sequence, which compresses
extremely well, but won't fit in memory uncompressed.


-- 



More information about the Digitalmars-d-bugs mailing list