【问题标题】:How to decompress a byte Array in Java如何在 Java 中解压缩字节数组
【发布时间】:2010-08-16 10:34:36
【问题描述】:

谁能告诉我如何解压字节数组?

这是我的代码。我已经尝试了很长时间,它给了我一个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();

【问题讨论】:

  • bArray 中的这些数据是从哪里来的?

标签: java deflate


【解决方案1】:

嗯,一个明确的问题是您显然在使用InputStream.read 而不检查返回值。这意味着您读取的数据可能比您预期的要少。

此外,您正尝试从偏移量 膨胀到unComp,但最大长度与unComp.length 相同。这意味着如果 offset 不是 0,您可能会尝试写入数组末尾。

您的意思是指 input 数组的偏移量吗?我不相信这就是它的意思。您应该使用setInput提供输入数据。

但是,您可以通过使用InflaterInputStream 而不是自己处理Inflate 来简化所有这些操作。

【讨论】:

  • 我也使用了很多流,比如输入流、SwappedDataInputStream 和 CountingInputstream,所以我不想使用任何其他流。我只是不知道为什么它给了我DataFormatExeption。即使这个文件是使用 Zlib 编写的,并且 Inflater 类也使用 Zlib。所以应该没有问题。
  • @sajjoo:您确定原始数据确实有效?压缩它的代码中可能有错误吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 2011-07-06
相关资源
最近更新 更多