Index: src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
===================================================================
--- src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java	(revision 771250)
+++ src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java	(working copy)
@@ -591,6 +591,12 @@
             outbuf[offset++] = 0;
         }
 
+        // this sets the real size if the size is bigger than the 8GB barrier
+        if (size > MAXSIZE){ 
+            offset = TarUtils.setBigSize(size, outbuf, 124, SIZELEN);
+        }
+
+        
         long chk = TarUtils.computeCheckSum(outbuf);
 
         TarUtils.formatCheckSumOctalBytes(chk, outbuf, csOffset, CHKSUMLEN);
Index: src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
===================================================================
--- src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java	(revision 771249)
+++ src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java	(working copy)
@@ -18,6 +18,8 @@
  */
 package org.apache.commons.compress.archivers.tar;
 
+import java.math.BigInteger;
+
 /**
  * This class provides static utility methods to work with byte streams.
  *
@@ -259,4 +261,32 @@
 
         return sum;
     }
+    
+    /**
+    * Set size using binary for files greater than 8 GB just like GNU tar
+    *
+    * @param value Thefile size if > 8GB
+    * @param buf The buffer from which to parse.
+    * @param offset The offset into the buffer from which to parse.
+    * @param length The number of header bytes to parse.
+    * @return The integer value of the octal bytes.
+    */
+    public static int setBigSize(long value, byte[] buf, int offset, int length) {
+       BigInteger Rsize = new BigInteger(""+value);
+       
+       byte[] last = new byte[12];
+       byte[] copier = Rsize.toByteArray();
+       for (int i=0; i<copier.length; i++) {
+           last[last.length-copier.length+i] = copier[i];
+       }
+       
+       last[0]=(byte)128;
+
+       for (int i=0 ; i <last.length ; i++ ) {
+           buf[ offset + i ] = last[i];
+       }
+       
+       return offset + length;
+    }
+
 }
