# Zip: uncompress to memory block instead of file?

**URL:** <https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711>\
**Category:** General JUCE discussion\
**Created:** [April 7, 2017, 4:20pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711 "2017-04-07T16:20:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![matkatmusic](https://avatars.discourse-cdn.com/v4/letter/m/dfb087/32.png) [@matkatmusic](https://forum.juce.com/u/matkatmusic)\
**Post date:** [April 7, 2017, 4:20pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711/1 "2017-04-07T16:20:59Z")

</div>

I am wondering if it’s possible to uncompress zip file to a memory block instead of to the disk. It appears that all of the methods regarding decompression are meant for writing to disk, not to memory.

are we supposed to do something like this:

```
ZipFile someFile("somePath.zip");
auto stream = someFile.createStreamForEntry(0); //create input stream from loaded zipfile
MemoryOutputStream mos;
mos.writeFromInputStream( *stream, stream->getTotalLength() ); //create an output stream
MemoryBlock mb( mos.getData(), mos.getDataSize() ); //write output stream to memoryBlock
String plainText = mb.toString(); //write memoryBlock to string object
```

---

<div class="post-metadata">

**Author:** ![kunitoki](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/kunitoki/32/15_2.png) [@kunitoki](https://forum.juce.com/u/kunitoki)\
**Post date:** [April 7, 2017, 5:16pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711/2 "2017-04-07T17:16:54Z")

</div>

you can use InputStream::readIntoMemoryBlock? or i’ve misunderstood your request?

---

<div class="post-metadata">

**Author:** ![matkatmusic](https://avatars.discourse-cdn.com/v4/letter/m/dfb087/32.png) [@matkatmusic](https://forum.juce.com/u/matkatmusic)\
**Post date:** [April 7, 2017, 7:25pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711/3 "2017-04-07T19:25:19Z")

</div>

Well, i’m retrieving some compressed strings from a server and am trying to decompress them without writing them to disk first. that’s where i’m having the difficulties.

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://forum.juce.com/u/jules)\
**Post date:** [April 7, 2017, 7:33pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711/4 "2017-04-07T19:33:38Z")

</div>

Struggling to see what the problem is… ZipFile has a constructor that takes an input stream rather than a file, and you can read all the entries as streams, so there’s really no need to use files anywhere if you don’t want to.

---

<div class="post-metadata">

**Author:** ![matkatmusic](https://avatars.discourse-cdn.com/v4/letter/m/dfb087/32.png) [@matkatmusic](https://forum.juce.com/u/matkatmusic)\
**Post date:** [April 7, 2017, 8:14pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711/5 "2017-04-07T20:14:28Z")

</div>

I had to switch over to using the GZIP classes as the php running on my host’s servers doesn’t have Zip, but it does have gzip/zlib.

perhaps you can tell me what i’m doing wrong here.

Here’s the example from [php.net](http://php.net)

```
<?php
$str = 'hello world'; 
$enc = zlib_encode($str, ZLIB_ENCODING_RAW);
echo bin2hex($enc);

```

which spits out: `cb48cdc9c95728cf2fca490100`

in xcode i’m going:

```
MemoryBlock mb;
mb.loadFromHexString("cb48cdc9c95728cf2fca490100");
MemoryInputStream mis(mb, false);

GZIPDecompressorInputStream gzip(mis);
MemoryBlock mb2(gzip.getTotalLength() );
gzip.read(mb2.getData(), gzip.getTotalLength());

String s2;
s2.createStringFromData(mb2.getData(), mb2.getSize());
DBG( s2 ); //should echo "hello world"

```

When I debug it, gzip.getTotalLength() return -1, so it never extracts it back to “hello world”. any ideas @kraken or @jules ?

---

<div class="post-metadata">

**Author:** ![matkatmusic](https://avatars.discourse-cdn.com/v4/letter/m/dfb087/32.png) [@matkatmusic](https://forum.juce.com/u/matkatmusic)\
**Post date:** [April 7, 2017, 9:58pm UTC](https://forum.juce.com/t/zip-uncompress-to-memory-block-instead-of-file/21711/6 "2017-04-07T21:58:13Z")

</div>

i got it somewhat working when I switched to ZLIB\_ENCODING\_GZIP in the php and used Format::gzipFormat in Juce. I also had to pass in the known length of the decompressed string.
