gzip -d 对于使用 BufferedWriter(GZIPOutputStream) 写入的文件返回“不是 gzip 格式”

问题描述 投票:0回答:1

这是我的情况:

代码(scala,在 akka.actor 中):

case WriterStart(fileName,actor) =>
{
  this.filename = fileName
  this.actor = actor
  zip = new GZIPOutputStream(new FileOutputStream(new File(fileName)))
  writer = new BufferedWriter(new OutputStreamWriter(zip, "UTF-8"))
  counter = 0
}
case InsertJoinedSubject(model) => //model: StringBuilder
{
  counter += model.lines.size
  writer.append(model)
}
case Finalize() =>
{
  System.out.println("output file " + filename + " has " + counter + " lines")
  writer.flush()
  writer.close()
  context.parent ! WriterClosed(actor, filename)
}

这会生成一个 gzip 文件,然后可以在我的 java/scala 框架中进行处理。在Windows7下用7zip打开也没有问题。 7zip 还声明它是 gzip 格式...,但是当尝试在 Ubuntu 环境中使用 gzip -d (gunzip) 打开作者生成的文件时,它只是告诉我,它“不是 gzip 格式”。

java scala ubuntu gzip bufferedwriter
1个回答
0
投票

一个假设: 您确定 writer.close() 被调用(进而调用 gzip 输出流 .close() 并调用 finish())?

因为也许页脚丢失了,也许 7zip 可以容忍这种情况,因为它不会读取整个文件来检查页脚是否正确(可能太长)。但是当你通过 gzip 管道直到最后时,gzip 会检查页脚并最终抱怨。

如果您的文件相当长(许多终端页面),并且您

cat myfile.gz | gzip -dc | more
难道只有到最后才会失败吗?

至于为什么‘你的框架’不会失败,你应该比我们更清楚;也许您将发生的 EOFException 静音,因为您认为它是正常的。

© www.soinside.com 2019 - 2024. All rights reserved.