Java commons compress";不适用于八进制“;

Java commons compress";不适用于八进制“;,java,apache-commons,Java,Apache Commons,我有一个java程序,需要tar/gz大量数据(14 gig),我正在使用commons compress。这将是一个每周重复出现的工作,并且是自动化的 当我试图压缩这种大小的东西时,我得到: java.lang.IllegalArgumentException: 13313903445=143144405525 will not fit in octal number buffer of length 11 at org.apache.commons.compress.archiver

我有一个java程序,需要tar/gz大量数据(14 gig),我正在使用commons compress。这将是一个每周重复出现的工作,并且是自动化的

当我试图压缩这种大小的东西时,我得到:

java.lang.IllegalArgumentException: 13313903445=143144405525 will not fit in octal number buffer of length 11
    at org.apache.commons.compress.archivers.tar.TarUtils.formatUnsignedOctalString(TarUtils.java:212)
    at org.apache.commons.compress.archivers.tar.TarUtils.formatLongOctalBytes(TarUtils.java:265)
    at org.apache.commons.compress.archivers.tar.TarArchiveEntry.writeEntryHeader(TarArchiveEntry.java:749)
    at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.putArchiveEntry(TarArchiveOutputStream.java:209)
    at com.broadridge.adc.core.commons.io.ADCFileUtils.addFilesToCompression(ADCFileUtils.java:144)
    at com.broadridge.adc.core.commons.io.ADCFileUtils.addFilesToCompression(ADCFileUtils.java:154)
    at com.broadridge.adc.core.commons.io.ADCFileUtils.compressFiles(ADCFileUtils.java:125)
    at com.broadridge.adc.core.commons.io.ADCFileUtils.compressFile(ADCFileUtils.java:106)
我的代码适用于少量信息(约600兆)。我已经看过了源代码,但还不清楚为什么会发生错误


有人知道为什么会发生这种情况吗?

你超过了12的限制

Javadoc告诉我们的是:

标头缓冲区中大小字段的长度。包括尾随字符 空间或NUL

它用于stacktrace中的。在堆栈的后面,这个限制被1减去,结果限制为11,这是异常消息的一部分

调用调用堆栈的后面部分,超过限制11


因此,您似乎超出了某些最大标题字段大小。

可能是commons compress使用的tar版本是旧样式,具有8 gig的限制。实际编程解决方案是在TarArchiveOutputStream(在commons compress 1.4或>)中设置BigNumberMode代码:TarArchiveOutputStream taos=new TarArchiveOutputStream(新的GZIPOutputStream(新的缓冲输出流(fos));taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_星);taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_星);当你找到了一个解决方案,而你没有遇到这类问题时,那么就提供一个你自己问题的答案。当你接受你自己的答案时,我不会生气地离开。我的答案只指向问题,你的答案提供了一个更有价值的解决方案。