1 6 21 22 package de.schlichtherle.io.archive.tar; 23 24 import de.schlichtherle.io.archive.*; 25 import de.schlichtherle.io.archive.spi.*; 26 import de.schlichtherle.io.rof.*; 27 28 import java.io.*; 29 30 import org.apache.tools.bzip2.*; 31 32 52 public class TarBZip2Driver extends TarDriver { 53 54 private static final int BUFSIZE = 4096; 55 56 62 public static final int BLOCKSIZE = 9; 64 private final int blockSize; 65 66 71 public TarBZip2Driver() { 72 this(ENCODING, BLOCKSIZE); 73 } 74 75 83 public TarBZip2Driver(String encoding) { 84 this(encoding, BLOCKSIZE); 85 } 86 87 public TarBZip2Driver(int blockSize) { 88 this(ENCODING, blockSize); 89 } 90 91 99 public TarBZip2Driver(final String encoding, final int blockSize) { 100 super(encoding, null, null); 101 this.blockSize = blockSize; 102 } 103 104 108 115 protected InputStream createInputStream(ReadOnlyFile rof) 116 throws IOException { 117 final InputStream in = super.createInputStream(rof); 118 if (in.read() != 'B' || in.read() != 'Z') 121 throw new IOException("Not a BZIP2 compressed input stream!"); 122 final byte[] magic = new byte[2]; 123 final InputStream vin = TarInputArchive.readAhead(in, magic); 124 if (magic[0] != 'h' || magic[1] < '1' || '9' < magic[1]) 125 throw new IOException("Not a BZIP2 compressed input stream!"); 126 return new CBZip2InputStream(new BufferedInputStream(vin, BUFSIZE)); 127 } 128 129 public OutputArchive createOutputArchive( 130 final Archive archive, 131 final OutputStream out, 132 final InputArchive source) 133 throws IOException { 134 out.write(new byte[] { 'B', 'Z' }); 137 return super.createOutputArchive(archive, 138 new CBZip2OutputStream( 139 new BufferedOutputStream(out, BUFSIZE), 140 blockSize), 141 source); 142 } 143 } 144 | Popular Tags |