|
15 | 15 | % |
16 | 16 | % input: |
17 | 17 | % input: a string, int8/uint8 vector or numerical array to store the GZIP-compressed data |
18 | | -% info (optional): a struct produced by the zmat/lz4hcencode function during |
| 18 | +% info (optional): a struct produced by the zmat/gzipencode function during |
19 | 19 | % compression; if not given, the inputs/outputs will be treated as a |
20 | 20 | % 1-D vector |
21 | 21 | % |
|
46 | 46 | [varargout{1:nargout}] = zmat(varargin{1}, 0, 'gzip', varargin{2:end}); |
47 | 47 | end |
48 | 48 | return |
49 | | -elseif (isoctavemesh) |
50 | | - [varargout{1:nargout}] = octavezmat(varargin{1}, 0, 'gzip'); |
51 | | - return |
52 | 49 | end |
53 | | -error(javachk('jvm')); |
54 | 50 |
|
55 | 51 | if (ischar(varargin{1})) |
56 | 52 | varargin{1} = uint8(varargin{1}); |
57 | 53 | end |
58 | 54 |
|
59 | 55 | input = typecast(varargin{1}(:)', 'uint8'); |
60 | 56 |
|
61 | | -gzip = java.util.zip.GZIPInputStream(java.io.ByteArrayInputStream(input)); |
62 | | -buffer = java.io.ByteArrayOutputStream(); |
63 | | -org.apache.commons.io.IOUtils.copy(gzip, buffer); |
64 | | -gzip.close(); |
| 57 | +if (~usejava('jvm')) |
| 58 | + if (nargin > 1) |
| 59 | + [varargout{1:nargout}] = octavezmat(varargin{1}, varargin{2}, 'gzip'); |
| 60 | + else |
| 61 | + [varargout{1:nargout}] = octavezmat(varargin{1}, 0, 'gzip'); |
| 62 | + end |
| 63 | + return |
| 64 | +end |
65 | 65 |
|
66 | | -if (nargout > 0) |
67 | | - varargout{1} = typecast(buffer.toByteArray(), 'uint8')'; |
68 | | - if (nargin > 1 && isstruct(varargin{2}) && isfield(varargin{2}, 'type')) |
69 | | - inputinfo = varargin{2}; |
70 | | - varargout{1} = typecast(varargout{1}, inputinfo.type); |
71 | | - varargout{1} = reshape(varargout{1}, inputinfo.size); |
| 66 | +if (isoctavemesh) |
| 67 | + % Octave with Java: write/read bytes one at a time |
| 68 | + n = numel(input); |
| 69 | + inputBaos = javaObject('java.io.ByteArrayOutputStream', n); |
| 70 | + for i = 1:n |
| 71 | + inputBaos.write(int32(input(i))); |
| 72 | + end |
| 73 | + bais = javaObject('java.io.ByteArrayInputStream', inputBaos.toByteArray()); |
| 74 | + gzis = javaObject('java.util.zip.GZIPInputStream', bais); |
| 75 | + baos = javaObject('java.io.ByteArrayOutputStream'); |
| 76 | + while true |
| 77 | + b = gzis.read(); |
| 78 | + if (b < 0) |
| 79 | + break |
| 80 | + end |
| 81 | + baos.write(b); |
72 | 82 | end |
| 83 | + gzis.close(); |
| 84 | + varargout{1} = typecast(baos.toByteArray(), 'uint8')'; |
| 85 | +else |
| 86 | + % MATLAB with Java: use IOUtils for efficient copy |
| 87 | + gzip = java.util.zip.GZIPInputStream(java.io.ByteArrayInputStream(input)); |
| 88 | + buffer = java.io.ByteArrayOutputStream(); |
| 89 | + org.apache.commons.io.IOUtils.copy(gzip, buffer); |
| 90 | + gzip.close(); |
| 91 | + varargout{1} = typecast(buffer.toByteArray(), 'uint8')'; |
| 92 | +end |
| 93 | + |
| 94 | +if (nargin > 1 && isstruct(varargin{2}) && isfield(varargin{2}, 'type')) |
| 95 | + inputinfo = varargin{2}; |
| 96 | + varargout{1} = typecast(varargout{1}, inputinfo.type); |
| 97 | + varargout{1} = reshape(varargout{1}, inputinfo.size); |
73 | 98 | end |
0 commit comments