【发布时间】:2012-05-08 14:52:15
【问题描述】:
我想用 Java 将一个未知大小的大流写入一个 tar 文件。我知道 Apache 有 commons compress library 和 handles tar files,但他们要求我提前知道大小。考虑一下 Apache 自己的example:
TarArchiveEntry entry = new TarArchiveEntry(name);
entry.setSize(size);
tarOutput.putArchiveEntry(entry);
tarOutput.write(contentOfEntry);
tarOutput.closeArchiveEntry();
写完之后我会知道条目的大小,但之前不会。有没有一种方法可以让我编写内容,然后在完成后将大小写入标题?
【问题讨论】:
-
@MattBall From the documentation:因为 TAR 文件格式需要提前知道每个条目的长度,来自未知来源的条目实际上是写入临时文件 并在调用它们的 OutputStream.close() 方法时复制到底层的 TarArchiveOutputStream。这对于大文件是不可取的。
-
是的。 AFAIK,真的没有其他方法可以解决它。你必须提前知道尺寸。如果这是个问题,那就使用比 TAR 更现代的东西。
-
如果您可以选择,使用 ZIP 而不是 TAR 可能是一种可行的方式。这就是我所做的;)