问题标签 [gzipinputstream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - GZIPInputStream 转字符串
我正在尝试将 HTTP 响应的 gzip 压缩正文转换为纯文本。我已获取此响应的字节数组并将其转换为 ByteArrayInputStream。然后我将其转换为 GZIPInputStream。我现在想读取 GZIPInputStream 并将最终解压缩的 HTTP 响应正文存储为纯文本字符串。
此代码会将最终解压缩的内容存储在 OutputStream 中,但我想将内容存储为字符串:
java - Android:解压缩使用 PHP gzcompress() 压缩的字符串
如何解压缩由 PHP gzcompress() 函数压缩的字符串?
有完整的例子吗?
谢谢
我现在这样尝试:
但如果我试图解压缩 PHP gzcompress (-ed) 字符串,它就不起作用。
android - GZIPInputStream 在 Android 2.3 中因 IOException 而失败,但在所有以前的版本中都可以正常工作吗?
我今天将手机更新为 Gingerbread(2.3.2)并启动了我开发的应用程序,发现它无法加载数据。该应用程序在我测试过的从 1.6 到 2.2 的所有其他版本的 Android 上运行良好,但随后在 Gingerbread 中出现 IOException。有人知道 GZipInputStream 或 URL.openStream() 是否发生了变化?
有问题的代码类似于以下内容:
在 1.6 到 2.2 中,此代码工作正常,在 2.3 中,我收到一个 IOException,其中包含有关魔术块不正确的消息。我假设 openStream 发生了一些变化,这会弄乱 MIME 类型或此数据上的某些内容。我在其他地方读到 openStream 不是处理 HTTP 连接的最可靠方法,因此这可能是重新编写连接代码的好借口。
java - 这是 Java GZipInputStream 类中的错误吗?
我注意到我的一些 gzip 解码代码似乎无法检测到损坏的数据。我认为我已经将问题追溯到 Java GZipInputStream 类。特别是,当您使用单个“读取”调用读取整个流时,损坏的数据似乎不会触发 IOException。如果您在 2 次或更多次调用中读取相同损坏数据的流,则它会触发异常。
在考虑提交错误报告之前,我想看看这里的社区是怎么想的。
编辑:我修改了我的例子,因为最后一个没有清楚地说明我认为是什么问题。在这个新示例中,一个 10 字节的缓冲区被压缩,压缩后的缓冲区的一个字节被修改,然后被解压缩。对“GZipInputStream.read”的调用返回 10 作为读取的字节数,这是您对 10 字节缓冲区的期望值。然而,解压缩的缓冲区与原始缓冲区不同(由于损坏)。不会抛出异常。我确实注意到在读取后调用“可用”返回“1”而不是“0”,如果已达到 EOF,它将返回“0”。
这是来源:
java - 将大型 gzip 压缩数据文件上传到 HDFS
我有一个用例,我想在 HDFS 上上传大的 gzip 压缩文本数据文件(~ 60 GB)。
我下面的代码大约需要 2 个小时才能以 500 MB 的块上传这些文件。以下是伪代码。我正在检查是否有人可以帮助我减少这个时间:
i) int fileFetchBuffer = 500000000; System.out.println("文件获取缓冲区为:" + fileFetchBuffer); 整数偏移 = 0;int bytesRead = -1;
java - BufferedReader 中的 GZIPInputStream 文件结尾序列
我使用一个 Java BufferedReader 对象逐行读取一个 GZIPInputStream,它指向一个有效的 GZIP 存档,该存档包含 1,000 行 ASCII 文本,采用典型的 CSV 格式。代码如下所示:
其中 file 是指向档案的实际 File 对象。
我通过调用通读了所有文件
并且阅读器按预期遍历文件,但最后它绕过第 1000 行并再读取一行(即,结束循环后 count = 1001)。
在最后一行调用line.length()会报告大量(4,000+)个字符,所有这些字符都是不可打印的(Character.getNumericValue()返回 -1)。
实际上,如果我执行line.getBytes(),则生成的 byte[] 数组具有相同数量的 NULL 字符('\0')。
这看起来像是 BufferedReader 中的错误吗?
无论如何,任何人都可以建议一种解决方法来绕过这种行为吗?
编辑:更奇怪的行为:读取的第一行以文件名、几个 NULL 字符('\0')和事物行用户名和组名为前缀,然后是实际文本!
编辑:我创建了一个非常简单的测试类,它至少在我的平台上重现了我上面描述的效果。
编辑:显然是误报,我得到的文件不是普通的 GZIP 而是 tar 的 GZIP,所以这就解释了,不需要进一步测试。感谢大家!
java - GZIPInputStream 和字符集
我有一个包含拉丁文、西里尔文和中文字符的文本。我尝试使用 GZIPInputStream压缩字符串(over bytes[]
)并解压缩它。GZIPOutputStream
但我无法将所有字符转换回原始字符。有些显示为?
.
我认为 UTF-16 会完成这项工作。
有什么帮助吗?
问候
这是我的代码:
java - 获取此 GZIPInputStream 的未压缩大小?
我有一个GZIPInputStream
我从另一个构建的ByteArrayInputStream
。我想知道 gzip 数据的原始(未压缩)长度。虽然我可以读到最后GZIPInputStream
,然后数数,但会耗费大量时间并浪费 CPU。我想在阅读之前知道大小。
有没有类似ZipEntry.getSize()
for的方法GZIPInputStream
:
public long getSize ()
自: API 级别 1
获取此 ZipEntry 的未压缩大小。
java - 从 GZIPInputStream 读取最后 *n* 行
我正在阅读 zip 中的一个巨大的 txt 文件。
我需要阅读文件的最后n 行。
在 eof 之前没有 readline 是否可以做到这一点?
java - Android 的 GZIPInputStream 是否存在泄漏问题
我发现对于某些情况(GZIPInputStream throw IOException),存在泄漏-在第一条语句中构造的 GZIPInputStream 的 Inflater 成员未通过函数“end()”正确释放。在这种情况下,GZIPInputStream 没有被构造,所以调用函数不能关闭它。GZIPInputStream 真的错了吗?