java - 在 java 中解压缩 gzip 输入流时出现“不是 gzip 格式”错误

标签 java gzip compression

我的代码正在尝试解压缩从 gzip 文件中读取的输入流。

这是代码片段:

   InputStream is = new GZIPInputStream(new ByteArrayInputStream(fcontents.getBytes()));

文件本身没问题:

$cat storefront3.gz  | gunzip
180028796
80026920
180028796
180026921
8002790180
800001
1800002
1800007
800008
800009

在顶部代码片段之前通过 FileInputStream 读取的数据肯定看起来像 gzip 的东西(注意原始文件是 storefront3.tsv):

��[�Rstorefront3.tsvu���0k{)�?�/FBģ��Y'��Q�a���s~���}6���d�{2+���O���D�m~�O��

但得到以下内容:

Caused by: java.io.IOException: Not in GZIP format
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:141)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:56)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:65)

这是 .gz 文件的十六进制转储

23:40:44/storefronts:72 $od -cx  storefront3.gz
0000000  037 213  \b  \b 201   [ 347   R  \0 003   s   t   o   r   e   f
             8b1f    0808    5b81    52e7    0300    7473    726f    6665
0000020    r   o   n   t   3   .   t   s   v  \0   u 212 273 025 200   0
             6f72    746e    2e33    7374    0076    8a75    15bb    3080
0000040   \f 003   k   { 032   ) 200   ? 373   /   F   B   ģ  ** 302 131
             030c    7b6b    291a    3f80    2ffb    4246    a3c4    cdc2
0000060    Y   ' 261 200   Q 331   a 276 276 350 001   s   ~ 222 262 175
             2759    80b1    d951    be61    e8be    7301    927e    dcb2
0000100    }   6 226 231 367   d 200   {   2   + 211 337 342 020   O 022
             367d    9996    64f7    7b80    2b32    df89    10e2    f14f
0000120  022 343 035 246   D 211   m   ~ 003 326   O 235 030 236  \0  \0
             e312    a61d    8944    7e6d    d603    9d4f    9e18    0000
0000140   \0
             0000

更新

我也尝试过使用 FileInputStream。以下给出相同的错误

      GZIPInputStream strm = new GZIPInputStream(new FileInputStream(tmpFileName));

最佳答案

既然 fcontents 包含您的 gzip 数据,它应该是 byte[] 而不是 String

我推荐使用 IOUtils将文件读入字节数组,因为将文件读入字符串很可能会损坏您的数据。

关于java - 在 java 中解压缩 gzip 输入流时出现“不是 gzip 格式”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399678/

相关文章:

java - JDK 8 在 Linux 上随机崩溃

Java Android XML解析,无法连接网站?

c++ - 如何从字节创建 DICOM 图像 (DCMTK)

Flutter video_compress 然后 ffmpeg 将视频修剪到 30 秒失败,日志无穷无尽

java - 一些 ASCII 字符可以中断/结束 Java 中的任何字符串/数组/流吗?

java - Couchbase RX 客户端 - 合并多个可观察量与平面图

java - 在未实现的 Cloneable 类的对象上调用clone() 方法不会抛出 RuntimeException

javascript - 如何编写压缩友好的 JavaScript?

java - 没有bean符合注入(inject)到注入(inject)点的条件

python - 如何在 Python 中 gzip 压缩字符串?