问题标签 [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 - Java GzipInputStream 转换为 DataInputStream
我对 Java 中的 GZip 有疑问。目前我使用 gzip 压缩的文件。一个 gzip 存档中的一个文件。如果我手动解压缩它们然后解析它们一切正常。但我想用 Java 和 GZipInputStream 自动化它,但它不起作用。最后我需要有 DataInputStream 。我的代码是:
我也试过 new GZIPInputStream(new FileInputStream(baseFile)); 结果是一样的。由于输出,我看到 Gzip 流毫无例外地创建,但后来我从 DataInputStream 获得无效数据。请帮忙 :)
java - 从 GZipped 文件中读取对象时出现 ClassNotFoundException
*.gz 文件是在我正在使用的包的先前版本下创建的(它具有类 tratz.semantics.ClassificationBundle)。在当前版本中,该类被命名为 miacp.semantics.ClassificationBundle。两者的成员相同。有什么方法可以让早期版本在后期版本中可读吗?基本的读取功能是
我有早期版本,所以我可以读取那个版本的文件。但是,我将如何创建一个可以在新版本中读取的新文件?
java - java GZIPInputStream 和 GZIPOutputStream 没有按预期工作
我正在尝试将一系列Long
's 写入 a GZIPOutputStream
,希望稍后解压缩这些数字。
当我尝试使用少量 ' 时,以下程序可以正常工作,但它会抛出许多' 的Long
异常,例如 (10240)。Long
请查看并运行此代码:
输出:
java - 在 GZIP 解压过程中设置 ProgressBar maxValue 和 publishProgress 值
我有一个 AsyncTask 正在执行解压缩 GZIP 文件的工作。我刚刚了解到我可以发布 AsyncTasks 的进度,并且已经成功地设法让它与我之前创建的其他 AsyncTasks 一起工作。我知道为了做到这一点,需要 2 个重要值,最大值和当前进度值。
我遇到的问题是我不确定如何从输入流中检索这些值。我当前的 AsyncTask 如下所示:
我在我的代码中评论了我认为我需要找到值的地方,但在这里需要一些帮助。任何帮助表示赞赏。
java - 解压 HTTPInputStream 时 GZIPInputStream 过早关闭
问题
请参阅下面编辑部分中的更新问题
我正在尝试使用 GZIPInputStream 即时从 Amazon S3 解压缩大型(~300M)GZIPed 文件,但它只输出文件的一部分;但是,如果我在解压缩之前下载到文件系统,则 GZIPInputStream 将解压缩整个文件。
如何让 GZIPInputStream 解压缩整个 HTTPInputStream 而不仅仅是它的第一部分?
我试过的
请参阅下面编辑部分中的更新
我怀疑一个 HTTP 问题,除了没有抛出异常,GZIPInputStream 每次都返回一个相当一致的文件块,据我所知,它总是在 WET 记录边界上中断,尽管它选择的边界是不同的URL(这很奇怪,因为所有内容都被视为二进制流,根本没有解析文件中的 WET 记录。)
我能找到的最接近的问题是 从 s3 读取时 GZIPInputStream 过早关闭该问题的答案是,某些 GZIP 文件实际上是多个附加的 GZIP 文件,而 GZIPInputStream 不能很好地处理。但是,如果是这种情况,为什么 GZIPInputStream 可以在文件的本地副本上正常工作?
演示代码和输出
下面是一段示例代码,演示了我看到的问题。我已经在两个不同网络上的两台不同 Linux 计算机上使用 Java 1.8.0_72 和 1.8.0_112 对其进行了测试,结果相似。我希望解压后的 HTTPInputStream 的字节数与解压后的本地文件副本的字节数相同,但解压后的 HTTPInputStream 小得多。
输出 示例代码编辑
根据@VGR 的评论,演示代码中的已关闭流和相关通道。
更新:
问题似乎确实是文件特有的。我在本地提取了 Common Crawl WET 存档(wget),解压缩它(gunzip 1.8),然后重新压缩它(gzip 1.8)并重新上传到 S3,然后即时解压缩工作正常。如果您修改上面的示例代码以包含以下行,您可以看到测试:
URL rezippeds3 指向我下载、解压缩和重新压缩,然后重新上传到 S3 的 WET 存档文件。您将看到以下输出:
正如您所看到的,一旦文件被重新压缩,我就能够通过 GZIPInputStream 流式传输它并获取整个文件。原始文件仍然显示解压缩的通常提前结束。当我下载并上传 WET 文件而不重新压缩它时,我得到了同样不完整的流媒体行为,所以它肯定是修复它的重新压缩。我还将原始文件和重新压缩后的两个文件都放到了传统的 Apache Web 服务器上,并且能够复制结果,因此 S3 似乎与该问题无关。
所以。我有一个新问题。
新问题
为什么读取相同内容时 FileInputStream 的行为与 HTTPInputStream 不同。如果它是完全相同的文件,为什么:
新 GZIPInputStream(urlConnection.getInputStream());
行为不同于
新 GZIPInputStream(new FileInputStream("./test.wet.gz"));
?? 输入流不只是输入流吗?
java - 从 GZIPInputStream 读取大量字节
我正在通过 GZIPInputStream 读取压缩文件。我想一次读取大量数据,但是无论我要求 GZIPInputStream 读取多少字节,它总是读取的字节数要少得多。例如,
读取的字节总是在 1800 字节左右,而它应该几乎等于 bArray 的大小,在本例中为 81920。为什么会这样?有没有办法解决这个问题,并且真的可以读取更多的字节数?
java - GZIPInputStream 无法在接收端解码(无效的代码长度设置)
我正在尝试使用 GZIPOutputStream 在客户端中对字符串进行编码,然后使用 GZIPOutputStream 在服务器中解码该字符串。
客户端代码(初始套接字连接建立后)为:
以及服务器端代码(同样,在建立连接之后):
我检查并正确传递了缓冲区长度(即编码消息的大小),因此传输了正确的字节数。但是,我得到了这个:
有任何想法吗?
提前感谢您的任何帮助!
android - 在android上通过短信发送压缩图像文件
我想知道是否可以将图像转换为 base64 字符串,然后使用 GZIP 对其进行压缩并通过 SMS 将其发送到另一部 android 手机,在该手机中对其进行解压缩、解码,然后将图像显示给用户?如果是,那么可能的解决方案是什么?
java - 解压 Gzip 文件并存储在变量中
我已经搜索了很多从字节到字符串的转换,但我的查询有点不同,请提前阅读。
目前我有一个 gzip 文件,我可以使用http://www.mkyong.com/java/how-to-decompress-file-from-gzip-file/中的代码对其进行解压缩。此代码帮助我将解压缩的输出存储在文件中,但如何将其存储在变量中?我目前正在使用此代码:
由于我bytes_read
在长度不是 1024 时将字节转换为字符串,所以我最终在我的 StringBuffer 中得到了一些奇怪的数据,但是在文件中没有这样的数据,因为fileOutputStream.write(buffer, 0, bytes_read);
它限制它写入更新的部分。我该如何解决?
提前致谢。