【问题标题】:Write Tar File of Unknown (Large) Size in Java用 Java 编写未知(大)大小的 Tar 文件
【发布时间】:2012-05-08 14:52:15
【问题描述】:

我想用 Java 将一个未知大小的大流写入一个 tar 文件。我知道 Apache 有 commons compress libraryhandles 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 可能是一种可行的方式。这就是我所做的;)

标签: java tar


【解决方案1】:

我最终接受了jtar 并对其进行了修改,这样您就不必在编写之前指定大小。似乎没有本机执行此操作的包...我设置了一个issue 来请求此更改。不幸的是,它需要大量丑陋的代码并创建我自己的 RandomAccessFileInputStream(),这不适合上传补丁。

【讨论】:

  • 不,抱歉。
  • 感谢您的回答,我最终改用了 zip;为我工作,轻松无忧;)
【解决方案2】:

如果你只需要添加一个文本文件,那么你可以使用 setSize(long) 方法并设置条目的大小。

其中 data 是你想要被 tarred 的字符串。

long size=data.getByte().length;
TarArchiveEntry entry = new TarArchiveEntry("sample.txt");
entry.setSize(size);
tarOutput.putArchiveEntry(entry);
tarOutput.write(contentOfEntry);
tarOutput.closeArchiveEntry();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-20
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2014-11-01
    相关资源
    最近更新 更多