java.util.zip.ZipException:不是 GZIP 格式 - commons-compress.jar

java.util.zip.ZipException: Not in GZIP format - commons-compress.jar

我第一次尝试使用 commons-compress.jar 解压缩 tar 文件。这是我抛出错误的初始代码。

TarArchiveInputStream myTarFile=new TarArchiveInputStream(
(new GZIPInputStream
(new FileInputStream("C:/Users/abc/xyz_20151010.tar")));
System.out.println(myTarFile.getCurrentEntry());

tar 文件有一组扩展名为 .dat.gz.bak

的文件

我需要从 .dat 文件中读取和处理数据。

您正在阅读 gzip 压缩的 tar 文件,而它是普通的 tar 并且只有其中的项目被压缩。

因此请避免使用此 GZIPInputStream,而是逐项进行,使用 read() 读取它,然后使用 GZIPInputstream(ByteArrayInputStream(content)) 进行处理。您可以考虑创建输入流来动态读取内容。

如果您的输入文件是 .tar.gz,您应该将文件包装在 TarInputStream 中,将 tar 包装在 GZip 中。但是从文件名看来你有一个普通的 tar 存档。

所以,如果我理解你的输入格式,你需要这样的东西:

public class MyDataReader {

  private final TarArchiveInputStream tar;

  public boolean hasNextData() {
    return tar.getNextTarEntry() != null;
  }

  public MyData nextData() {
    byte[] buff = new byte[tar.getCurrentEntry().getSize()];
    // loop over tar until all entry has been read
    InputStream entry = new ByteArrayInputStream(buff);
    GZIPInputStream gzip = new GZipInputStream(entry);
    // process gzip input stream
  }
}