gpt4 book ai didi

java - 是否可以检查文件 (.gz) 是否被多次压缩?

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:46 26 4
gpt4 key购买 nike

我遇到过这样一种情况,其中一个具有专有格式的文件被压缩为 .gz,随后将其重命名回其原始扩展名,然后再次压缩。我想捕捉这样的场景,想知道是否有一种方法可以检测文件何时被压缩两次。

我正在阅读 .gz 文件,如下所示:

 GZIPInputStream gzip = new GZIPInputStream(Files.newInputStream(inFile));
BufferedReader breader = new BufferedReader(new InputStreamReader(gzip));

最佳答案

您可以检查文件中是否存在有效的 gzip header 。 gzip 文件应包含定义的 header ,该 header 以值为 0x1f 和 0x8b 的 2 字节数字开头(参见 spec )。您可以检查这些字节以查看它们是否与 header 值匹配:

InputStream is = new FileInputStream(new File(filePath));
byte[] b = new byte[2];
int n = is.read(b);
if ( n != 2 ){
//not a gzip file
}
if ( (b[0] == (byte) 0x1f) && (b[1] == (byte)0x8b)){
//2-byte gzip header
}

仅这两个字节就有约 1/65k 的随机出现机会,但取决于您期望接收的数据足以作为您的决定的基础。为了对调用更有信心,您可以进一步阅读 header 以确保它遵循有效的规范值(请参阅上面的链接 - 例如,第三个字节通常但不总是 8 for DEFLATE 压缩,等等...)

关于java - 是否可以检查文件 (.gz) 是否被多次压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38858888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com