gpt4 book ai didi

java - 获取此 GZIPInputStream 的未压缩大小?

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:27 24 4
gpt4 key购买 nike

我有一个从另一个 ByteArrayInputStream 构建的 GZIPInputStream。我想知道 gzip 数据的原始(未压缩)长度。虽然我可以读取到GZIPInputStream的末尾,然后统计数量,但会花费很多时间和CPU。我想在阅读之前知道尺寸。

GZIPInputStream 是否有类似ZipEntry.getSize() 的方法:

public long getSize ()
Since: API Level 1
Gets the uncompressed size of this ZipEntry.

最佳答案

可以通过读取 gzip 文件的最后四个字节来确定未压缩的大小。

我在这里找到了这个解决方案:

http://www.abeel.be/content/determine-uncompressed-size-gzip-file

此链接中还有一些示例代码(更正为使用 long 而不是 int,以应对 2GB 到 4GB 之间的大小,这将使 int 环绕):

RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(raf.length() - 4);
byte b4 = raf.read();
byte b3 = raf.read();
byte b2 = raf.read();
byte b1 = raf.read();
long val = ((long)b1 << 24) | ((long)b2 << 16) | ((long)b3 << 8) | (long)b4;
raf.close();

val 是以字节为单位的长度。当心:当未压缩文件大于 4GB 时,您无法确定正确的未压缩大小!

关于java - 获取此 GZIPInputStream 的未压缩大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317243/

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