commons-compress“不适合八进制”

时间:2012-04-13 11:35:20

标签: java apache-commons

我有一个java程序,需要tar / gz大量数据(14演出),我正在使用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兆)。我查看了源代码但是我发现错误的原因并不清楚。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

你超过TarConstants.SIZELEN定义的一个限制,即12。

Javadoc告诉我们的是:

  

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

它由堆栈跟踪中的TarArchiveEntry.writeEntryHeader(byte[] outbuf)使用。在堆栈的后面,这个限制被减去1,导致限制为11,这是你的异常消息的一部分。

稍后在调用堆栈中TarUtils.formatUnsignedOctalString(final long value, byte[] buffer, final int offset, final int length)被调用,其中超出了11的限制。

所以你似乎超过了一些最大标题字段大小。

相关问题