MATLAB java.util.zip.ZipException:读取zraw时存储的块长度无效

时间:2019-04-03 11:52:17

标签: java matlab

问题可能很长,但我想提供尽可能多的信息!抱歉。

我正在使用MATLAB,并且有一个.zraw文件,像素在其中。 .zraw文件具有 320.449 个字节

我设法在MATLAB中读取了该文件并获取了数据。

[FileName,PathName,FilterIndex] = uigetfile('*.zraw','Select the image file');
dir = strcat(PathName,FileName);

FID = fopen(dir);
elementType = 'uint8';
compressedData = fread(FID, inf, 'uint8=>uint8' );

buffer = java.io.ByteArrayOutputStream();
zlib = java.util.zip.InflaterOutputStream( buffer );
zlib.write( compressedData, 0, numel( compressedData ) );
zlib.close();
data = typecast( buffer.toByteArray(), elementType )';

在MATLAB中执行此代码时:

compressedData has 320449x1 uint8 
data has 1515360x1 uint8
buffer is 1x1 ByteArrayOutputStream
zlib is 1x1 InflaterOutputStream
data has all the expected values and I can work with it.

一切正常!

但是现在,我想更改一些内容。读取MATLAB documentation后,fread()有更多调用。

我想每个字节跳过2个字节。当使用'uint8'读取文件时,我可以这样写:

compressedData = fread(FID, inf, 'uint8=>uint8', 2); 

在此调用之后,compressedData具有106.817字节。不出所料,由于我要读取文件的三分之一(320.449)

现在是时候创建缓冲区并对其进行充气了。但是,如果我写的行与以前相同:

buffer = java.io.ByteArrayOutputStream();
zlib = java.util.zip.InflaterOutputStream( buffer );
zlib.write( compressedData, 0, numel( compressedData ) );

然后我得到这个异常:

  
    

发生Java异常:java.util.zip.ZipException:不正确的标头检查     在java.util.zip.InflaterOutputStream.write(InflaterOutputStream.java:273)

  

我在Inflater documentation中进行了一些搜索。看来我必须使用nowarp布尔值以避免来自zlib的校验和。

因此,我现在重复一遍,但现在重复一遍:

buffer = java.io.ByteArrayOutputStream();
zlib = java.util.zip.InflaterOutputStream( buffer ,java.util.zip.Inflater(true));
zlib.write( compressedData, 0, numel( compressedData ) );

在这些行中,我遇到了被卡在的异常:

  
    

发生Java异常:java.util.zip.ZipException:存储的块长度无效     在java.util.zip.InflaterOutputStream.write(InflaterOutputStream.java:273)

  

我发现了一些相关问题herehere,但是我不确定下一步应该怎么解决...

0 个答案:

没有答案