如何在Java中解压缩字节数组
有人能告诉我如何解压缩字节数组吗 这是我的密码。我已经尝试了很久,它给了我一个如何在Java中解压缩字节数组,java,deflate,Java,Deflate,有人能告诉我如何解压缩字节数组吗 这是我的密码。我已经尝试了很久,它给了我一个DataFormatException byte bArray[] = new byte[tSizeOfTile]; input.read(bArray, offset, limit); byte[] unComp = new byte[bArray.length + 100]; Inflater inflate = new Inflater(); inflate.setInput(bArray); inflate
DataFormatException
byte bArray[] = new byte[tSizeOfTile];
input.read(bArray, offset, limit);
byte[] unComp = new byte[bArray.length + 100];
Inflater inflate = new Inflater();
inflate.setInput(bArray);
inflate.inflate(unComp, offset, bArray.length + 100);
inflate.end();
嗯,一个明确的问题是,您显然正在使用
InputStream.read
,而不检查返回值。这意味着您读取的数据可能比预期的要少
此外,您正试图从偏移量充气到unComp
,但最大长度与unComp.length
相同。这意味着,如果偏移量不是0,则可能试图写入数组的末尾
您是指引用输入数组的偏移量吗?我不相信这是什么意思。您应该使用setInput
仅提供输入数据
但是,您可以通过使用
InputStream
而不是自己处理InputStream
来简化所有这些操作。一个明确的问题是,您显然在使用InputStream.read
,而不检查返回值。这意味着您读取的数据可能比预期的要少
此外,您正试图从偏移量充气到unComp
,但最大长度与unComp.length
相同。这意味着,如果偏移量不是0,则可能试图写入数组的末尾
您是指引用输入数组的偏移量吗?我不相信这是什么意思。您应该使用setInput
仅提供输入数据
然而,通过使用
InflaterInputStream
而不是自己处理Inflate
,您可以使这一切变得更加容易。bArray中的这些数据是从哪里来的?bArray中的这些数据是从哪里来的?我还使用了很多流,比如输入流,交换了DataInputStream和CountingInputstream,因此我不想使用任何其他流。我只是不知道为什么它会给我DataFormatException。即使这个文件是使用Zlib编写的,充气器类也使用Zlib。所以应该没有问题。@sajjoo:你确定原始数据确实有效吗?您可能在压缩它的代码中有一个bug?我也使用了很多流,比如输入流、交换数据输入流和计数输入流,所以我不想使用任何其他流。我只是不知道为什么它会给我DataFormatException。即使这个文件是使用Zlib编写的,充气器类也使用Zlib。所以应该没有问题。@sajjoo:你确定原始数据确实有效吗?您可能在压缩它的代码中有一个bug?