| function Z = zstream(action,D) | |
| % Compress/decompress stream of bytes using Deflate/Inflate | |
| % FORMAT Z = zstream('C',D) | |
| % D - data stream to compress (converted to uint8 if needed) | |
| % Z - compressed data stream (uint8 vector) | |
| % FORMAT D = zstream('D',Z) | |
| % Z - data stream to decompress (uint8 vector) | |
| % D - decompressed data stream (uint8 vector) | |
| %__________________________________________________________________________ | |
| % | |
| % This C-MEX file relies on: | |
| % * miniz, by Rich Geldreich | |
| % http://code.google.com/p/miniz/ | |
| % Fallback Java implementation is adapted from: | |
| % * dzip/dunzip, by Michael Kleder | |
| % http://www.mathworks.com/matlabcentral/fileexchange/8899 | |
| %__________________________________________________________________________ | |
| % Copyright (C) 2015 Wellcome Trust Centre for Neuroimaging | |
| % Guillaume Flandin | |
| % $Id: zstream.m 6417 2015-04-21 16:03:44Z guillaume $ | |
| if exist('OCTAVE_VERSION','builtin') | |
| error('zstream.c not compiled - see Makefile'); | |
| end | |
| switch upper(action) | |
| case 'C' | |
| D = typecast(D(:),'uint8'); | |
| f = java.io.ByteArrayOutputStream(); | |
| g = java.util.zip.DeflaterOutputStream(f); | |
| g.write(D); | |
| g.close; | |
| Z = typecast(f.toByteArray,'uint8'); | |
| f.close; | |
| case 'D' | |
| import com.mathworks.mlwidgets.io.InterruptibleStreamCopier | |
| a = java.io.ByteArrayInputStream(D); | |
| b = java.util.zip.InflaterInputStream(a); | |
| isc = InterruptibleStreamCopier.getInterruptibleStreamCopier; | |
| c = java.io.ByteArrayOutputStream; | |
| isc.copyStream(b,c); | |
| Z = c.toByteArray; | |
| otherwise | |
| error('Unknown action "%s".',action); | |
| end | |