- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个从另一个 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/
GZIP 的大小限制为 4GB,从 http://www.gzip.org/#faq10 获取上面的链接中提到了一些补丁,可以读取超过 4GB 的文件。 我正在使用 GZIPInputStream 读
我需要清楚地了解 GZIPInputstream 的工作原理。我创建了 FileInputStream 对象并将其传递给 GZIPInputstream 以读取我的 config.tar.gz 文件。
简而言之,问题是每当我添加 GZipInputStream 和 GZipOutputStream 时,我的数据就会损坏。没有它们,一切都可以正常工作。 我有以下代码: public boolean l
我在解压缩文件时遇到了一个奇怪的问题,我正在考虑为此使用字符集 UTF-8。我正在使用 Guava 库。 public static byte[] gzip(final CharSequence cs
我有一个包含拉丁文、西里尔文和中文字符的文本。我尝试使用 GZIPOutputStream 压缩字符串(通过 bytes[])并使用 GZIPInputStream 解压缩它。但我无法将所有角色转换回
我正在尝试将 HTTP 响应的 gzip 压缩正文转换为纯文本。我已获取此响应的字节数组并将其转换为 ByteArrayInputStream。然后我将其转换为 GZIPInputStream。我现在
我有一个 .gz 格式的文件。用于读取此文件的 java 类是 GZIPInputStream。但是,这个类并没有扩展 java 的 BufferedReader 类。结果,我无法逐行读取文件。我需要
我正在尝试使用 GZIPOutputStream 在客户端中对字符串进行编码,然后使用 GZIPOutputStream 在服务器中对字符串进行解码。 客户端代码(在初始套接字连接建立之后)是: //
我正在通过 GZIPInputStream 读取 gzip 压缩文件。我想一次读取大量数据,但无论我要求 GZIPInputStream 读取多少字节,它总是读取少得多的字节数。例如, val bAr
在下面的行中,当instream是GZIPInputStream时,我发现c的值是完全随机的,要么大于或小于1024。但是当instream是FileInputStream时,返回值始终是1024。
我在使用 SharpZipLib 的 GZipInputStream 编写未压缩的 GZIP 流时遇到问题。我似乎只能获得 256 字节的数据,其余数据未写入并归零。已检查压缩流 (compresse
我有一个奇怪的程序,其中缓冲区的 GzipInputStream 零填充部分。我有幸知道字节在流中应该是什么样子,我可以看到缓冲区中填充了 8 个正确的字节和 12 个零(不应为零) 字节应该像这样-
我正在尝试在 Java 中使用 GZIPInputStream 来解压缩来自 .NET 应用程序的图像数据(以 GZIP 格式压缩)。图像数据作为 base64 字符串传输,因为它作为 XML 文本同
作为引用,这是我收到的完整错误: java.io.EOFException: Unexpected end of ZLIB input stream at java.util.zip.Infl
场景是读取一个gzip文件(扩展名为.gz) 知道有 GZIPInputStream 类来处理这个。 这里是将文件对象转换为 GZIPStream 的代码。 FileInputStream fin =
我有一个从另一个 ByteArrayInputStream 构建的 GZIPInputStream。我想知道 gzip 数据的原始(未压缩)长度。虽然我可以读取到GZIPInputStream的末尾,
是否有任何适用于 J2ME 的 GZIPInputStream 实现。我更喜欢 Apache 样式许可证 最佳答案 IIRC phoneME project包括 GZIPInputStream 的实现
我正在尝试将一系列 Long 写入 GZIPOutputStream,希望稍后能解压缩这些数字。 当我尝试使用少量 Long 时,以下程序运行良好,但使用许多 Long 时会抛出异常,例如 (1024
我有一个静态辅助方法,负责从我们的 Rails 应用程序中获取压缩的 JSON 字符串,并在返回 String 表示之前解压缩数据。 我编写了两个 JUnit 测试,一个测试 JSON 是否正确解析,
我使用 Java BufferedReader 对象逐行读取指向有效 GZIP 存档的 GZIPInputStream,该存档包含 1,000 行 ASCII 文本,采用典型的 CSV 格式。代码如下
我是一名优秀的程序员,十分优秀!