cindyhfls's picture
Upload 155 files
0b58803 verified
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