首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取此GZIPInputStream的未压缩大小?

获取此GZIPInputStream的未压缩大小?
EN

Stack Overflow用户
提问于 2011-09-06 08:50:41
回答 8查看 7.4K关注 0票数 12

我有一个GZIPInputStream,我是从另一个ByteArrayInputStream构建的。我想知道gzip数据的原始(未压缩)长度。虽然我可以读到GZIPInputStream的末尾,然后数数数字,但这将花费大量的时间和浪费CPU。我想在读之前知道它的尺寸。

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

public long getSize () 自: API级别1 获取此ZipEntry的未压缩大小。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-09-06 09:34:10

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

不是的。它不在Javadoc =>中,它不存在。

你要长度做什么?

票数 2
EN

Stack Overflow用户

发布于 2011-09-23 12:31:11

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

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

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

另外,在这个链接中还有一些示例代码(更正为使用long而不是int,以处理2GB到4GB之间的大小,这将使int包装起来):

代码语言:javascript
复制
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时,无法确定正确的未压缩大小!

票数 9
EN

Stack Overflow用户

发布于 2012-10-02 04:31:59

基于@Alexander的回答:

代码语言:javascript
复制
RandomAccessFile raf = new RandomAccessFile(inputFilePath + ".gz", "r");
raf.seek(raf.length() - 4);
byte[] bytes = new byte[4];
raf.read(bytes);
fileSize = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getInt();
if (fileSize < 0)
  fileSize += (1L << 32);
raf.close();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7317243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档