如何在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?