diff m-toolbox/classes/+utils/@helper/dunzip.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/+utils/@helper/dunzip.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,40 @@
+function M = dunzip(Z)
+% DUNZIP - decompress DZIP output to recover original data
+%
+% USAGE:
+% M = dzip(Z)
+%
+% VARIABLES:
+% Z = compressed variable to decompress
+% M = decompressed output
+%
+% NOTES: (1) The input variable Z is created by the DZIP function and
+%            is a vector of type uint8
+%        (2) The decompressed output will have the same data type and
+%            dimensions as the original data provided to DZIP.
+%        (3) See DZIP for other notes.
+%        (4) Carefully tested, but no warranty; use at your own risk.
+%        (5) Michael Kleder, Nov 2005
+
+import com.mathworks.mlwidgets.io.InterruptibleStreamCopier
+a=java.io.ByteArrayInputStream(Z);
+b=java.util.zip.InflaterInputStream(a);
+isc = InterruptibleStreamCopier.getInterruptibleStreamCopier;
+c = java.io.ByteArrayOutputStream;
+isc.copyStream(b,c);
+Q=typecast(c.toByteArray,'uint8');
+cn = double(Q(1)); % class
+nd = double(Q(2)); % # dims
+s = typecast(Q(3:8*nd+2),'double')'; % size
+Q=Q(8*nd+3:end);
+if cn == 3
+    M  = logical(Q);
+elseif cn == 4
+    M = char(Q);
+else
+    ct = {'double','single','logical','char','int8','uint8',...
+        'int16','uint16','int32','uint32','int64','uint64'};
+    M = typecast(Q,ct{cn});
+end
+M=reshape(M,s);
+return