gpt4 book ai didi

java - 如何使用 Apache Commons Compress 将更改文件附加到 Tar 存档

转载 作者:行者123 更新时间:2023-11-30 10:58:13 25 4
gpt4 key购买 nike

我正在使用 Apache Commons Compress 创建一个 tar 存档,但一直遇到以下异常:

java.io.IOException: request to write '571' bytes exceeds size in header of '45536102' bytes for entry 'logfile.log' at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.write(TarArchiveOutputStream.java:377) ~[commons-compress-1.9.jar:1.9]

问题是在下面的代码中,文件大小实际上从我添加 tar 归档条目到它全部读入 tar 输出流时发生了变化:

TarArchiveEntry entry = new TarArchiveEntry(fileToArchive);
tarOutputStream.putArchiveEntry(entry);
IOUtils.copy(new FileInputStream(fileToArchive), tarOutputStream);

如果在我将文件写入 tarOutputStream 时文件正在被修改(它是一个日志文件),我如何将文件写入 tar 存档?我应该将整个文件读入内存然后写入吗?或者只读到 tar 存档条目允许的大小?那些似乎都冒着数据损坏的风险。我能想到的唯一其他选择是将文件复制到本地文件系统,这样它就不会被修改,然后压缩该副本,但这看起来很笨拙。

最佳答案

在 tar 存档中,元数据(包括大小)位于实际内容之前。使用不可搜索的流时,无法在知道大小后倒带和替换它。

Apache Commons Compress 仅支持 tar 的纯流式传输模式,因此只有当条目的内容大小与写入元数据时的大小相同时,才可以添加条目。

您应该研究在归档之前轮换日志的方法。

关于java - 如何使用 Apache Commons Compress 将更改文件附加到 Tar 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32358654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com