这是我的情况:
代码(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 格式”。
一个假设: 您确定 writer.close() 被调用(进而调用 gzip 输出流 .close() 并调用 finish())?
因为也许页脚丢失了,也许 7zip 可以容忍这种情况,因为它不会读取整个文件来检查页脚是否正确(可能太长)。但是当你通过 gzip 管道直到最后时,gzip 会检查页脚并最终抱怨。
如果您的文件相当长(许多终端页面),并且您
cat myfile.gz | gzip -dc | more
难道只有到最后才会失败吗?
至于为什么‘你的框架’不会失败,你应该比我们更清楚;也许您将发生的 EOFException 静音,因为您认为它是正常的。