Author: bodewig Date: Tue Feb 10 15:57:46 2009 New Revision: 743003 URL: http://svn.apache.org/viewvc?rev=743003&view=rev Log: merge TarArchive*Stream with Tar*Stream
Removed: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.java Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=743003&r1=743002&r2=743003&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java Tue Feb 10 15:57:46 2009 @@ -28,8 +28,8 @@ import org.apache.commons.compress.archivers.cpio.CpioArchiveOutputStream; import org.apache.commons.compress.archivers.jar.JarArchiveInputStream; import org.apache.commons.compress.archivers.jar.JarArchiveOutputStream; -import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; -import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.compress.archivers.tar.TarInputStream; +import org.apache.commons.compress.archivers.tar.TarOutputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; @@ -52,7 +52,7 @@ } else if("zip".equalsIgnoreCase(archiverName)) { return new ZipArchiveInputStream(in); } else if("tar".equalsIgnoreCase(archiverName)) { - return new TarArchiveInputStream(in); + return new TarInputStream(in); } else if("jar".equalsIgnoreCase(archiverName)) { return new JarArchiveInputStream(in); } else if("cpio".equalsIgnoreCase(archiverName)) { @@ -67,7 +67,7 @@ } else if("zip".equalsIgnoreCase(archiverName)) { return new ZipArchiveOutputStream(out); } else if("tar".equalsIgnoreCase(archiverName)) { - return new TarArchiveOutputStream(out); + return new TarOutputStream(out); } else if("jar".equalsIgnoreCase(archiverName)) { return new JarArchiveOutputStream(out); } else if("cpio".equalsIgnoreCase(archiverName)) { @@ -88,8 +88,8 @@ return new ZipArchiveInputStream(input); } else if(JarArchiveInputStream.matches(signature, signatureLength)) { return new JarArchiveInputStream(input); - } else if(TarArchiveInputStream.matches(signature, signatureLength)) { - return new TarArchiveInputStream(input); + } else if(TarInputStream.matches(signature, signatureLength)) { + return new TarInputStream(input); } else if(ArArchiveInputStream.matches(signature, signatureLength)) { return new ArArchiveInputStream(input); } else if(CpioArchiveInputStream.matches(signature, signatureLength)) { Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java?rev=743003&r1=743002&r2=743003&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarInputStream.java Tue Feb 10 15:57:46 2009 @@ -23,10 +23,11 @@ package org.apache.commons.compress.archivers.tar; -import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveInputStream; /** * The TarInputStream reads a UNIX tar archive as an InputStream. @@ -35,7 +36,7 @@ * using read(). * */ -public class TarInputStream extends FilterInputStream { +public class TarInputStream extends ArchiveInputStream { private static final int SMALL_BUFFER_SIZE = 256; private static final int BUFFER_SIZE = 8 * 1024; private static final int LARGE_BUFFER_SIZE = 32 * 1024; @@ -59,6 +60,8 @@ // CheckStyle:VisibilityModifier ON + private final InputStream in; + /** * Constructor for TarInputStream. * @param is the input stream to use @@ -83,7 +86,7 @@ * @param recordSize the record size to use */ public TarInputStream(InputStream is, int blockSize, int recordSize) { - super(is); + this.in = is; this.buffer = new TarBuffer(is, blockSize, recordSize); this.readBuf = null; @@ -167,23 +170,6 @@ } /** - * Since we do not support marking just yet, we return false. - * - * @return False. - */ - public boolean markSupported() { - return false; - } - - /** - * Since we do not support marking just yet, we do nothing. - * - * @param markLimit The limit to mark. - */ - public void mark(int markLimit) { - } - - /** * Since we do not support marking just yet, we do nothing. */ public void reset() { @@ -202,7 +188,7 @@ * @return The next TarEntry in the archive, or null. * @throws IOException on error */ - public TarArchiveEntry getNextEntry() throws IOException { + public ArchiveEntry getNextEntry() throws IOException { if (hasHitEOF) { return null; } @@ -399,4 +385,47 @@ out.write(buf, 0, numRead); } } + + // used to be implemented via FilterInputStream + public int read(byte[] b) throws IOException { + return read(b, 0, b.length); + } + + // ArchiveInputStream + + public static boolean matches(byte[] signature, int length) { + // 6574 7473 2e31 6d78 + + if (length < 8) { + return false; + } + + if (signature[0] != 0x74) { + return false; + } + if (signature[1] != 0x65) { + return false; + } + if (signature[2] != 0x73) { + return false; + } + if (signature[3] != 0x74) { + return false; + } + if (signature[4] != 0x31) { + return false; + } + if (signature[5] != 0x2e) { + return false; + } + if (signature[6] != 0x78) { + return false; + } + if (signature[7] != 0x6d) { + return false; + } + + return true; + } + } Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java?rev=743003&r1=743002&r2=743003&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarOutputStream.java Tue Feb 10 15:57:46 2009 @@ -18,9 +18,10 @@ */ package org.apache.commons.compress.archivers.tar; -import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveOutputStream; /** * The TarOutputStream writes a UNIX tar archive as an OutputStream. @@ -28,7 +29,7 @@ * by writing to this stream using write(). * */ -public class TarOutputStream extends FilterOutputStream { +public class TarOutputStream extends ArchiveOutputStream { /** Fail if a long file name is required in the archive. */ public static final int LONGFILE_ERROR = 0; @@ -53,6 +54,8 @@ private boolean closed = false; + private final OutputStream out; + /** * Constructor for TarInputStream. * @param os the output stream to use @@ -77,7 +80,7 @@ * @param recordSize the record size to use */ public TarOutputStream(OutputStream os, int blockSize, int recordSize) { - super(os); + out = os; this.buffer = new TarBuffer(os, blockSize, recordSize); this.debug = false; @@ -345,4 +348,33 @@ buffer.writeRecord(recordBuf); } + + // used to be implemented via FilterOutputStream + public void flush() throws IOException { + out.flush(); + } + + // ArchiveOutputStream + + public void closeArchiveEntry() throws IOException { + closeEntry(); + } + + public void putArchiveEntry(ArchiveEntry entry) throws IOException { + putNextEntry((TarArchiveEntry) entry); + } + + public String getDefaultFileExtension() { + return "tar"; + } + + public byte[] getHeader() { + // TODO Auto-generated method stub + return null; + } + + public String getName() { + return "tar"; + } + } Modified: commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java?rev=743003&r1=743002&r2=743003&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java (original) +++ commons/sandbox/compress/trunk/src/test/java/org/apache/commons/compress/DetectArchiverTestCase.java Tue Feb 10 15:57:46 2009 @@ -29,7 +29,7 @@ import org.apache.commons.compress.archivers.ar.ArArchiveInputStream; import org.apache.commons.compress.archivers.cpio.CpioArchiveInputStream; import org.apache.commons.compress.archivers.jar.JarArchiveInputStream; -import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.archivers.tar.TarInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; public final class DetectArchiverTestCase extends TestCase { @@ -46,7 +46,7 @@ new BufferedInputStream(new FileInputStream( new File(getClass().getClassLoader().getResource("bla.tar").getFile())))); assertNotNull(tar); - assertTrue(tar instanceof TarArchiveInputStream); + assertTrue(tar instanceof TarInputStream); final ArchiveInputStream zip = factory.createArchiveInputStream( new BufferedInputStream(new FileInputStream(