2012-04-13 12 views
1

は/データの大ビット(14回のギグを)GZと私はコモンズ-圧縮を使用しています。これは毎週再発する仕事になり、自動化されます。コモンズ・圧縮「8進数で収まらないだろう」

私は私が手にこの大きさの何かを圧縮しようとすると:

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メガバイトの周りの)情報の少量のために正常に動作します。私はソースコードを見てきましたが、なぜエラーが発生しているのかはわかりません。

これはなぜ起こっているのですか?

+0

commons-compressが使用するtarのバージョンは、8ギガバイトの制限がある古いスタイルです。 – user965697

答えて

2

あなたはこれについて教えてくれる何のJavadoc 12

あるTarConstants.SIZELENによって定義されたいくつかの制限を超えている:

ヘッダバッファにおけるサイズフィールドの長さ。末尾に スペースまたはNULが含まれます。

これはスタックトレースにあるTarArchiveEntry.writeEntryHeader(byte[] outbuf)によって使用されます。スタックの後半では、この制限が1減算され、例外メッセージの一部である制限が11になります。 11の制限を超えている場合

はその後、コールスタックTarUtils.formatUnsignedOctalString(final long value, byte[] buffer, final int offset, final int length)で呼ばれています。

したがって、最大ヘッダーフィールドサイズを超えているようです。

+1

実際にプログラム溶液(> 1.4圧縮コモンズ又はにおける)コードTarArchiveOutputStreamでBigNumberModeを設定することである:TarArchiveOutputStreamのタオス=新しいTarArchiveOutputStream( \t \t \t新しいGZIPOutputStream(新たなBufferedOutputStream(FOS)))。 \t \t taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR)。 \t \t taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU)。 – user965697

+0

あなたがその種の問題に遭遇しない解決策を見つけたら、あなた自身の質問に答えてください。あなたが自分の答えを受け入れるとき、私は怒鳴りしないでください。私の答えは問題を指摘するだけで、あなたの答えははるかに価値のある解決法を提供します。 –

関連する問題