package com.yahoo.glimmer.util; import java.io.IOException; import java.io.OutputStream; import org.apache.hadoop.io.compress.bzip2.CBZip2InputStream; import org.itadaki.bzip2.BZip2OutputStream; public class BZip2BlockIndexedOutputStream extends BZip2OutputStream { public final static byte DELIMITER_BIT_LENGTH = 6 * 8; public static BZip2BlockIndexedOutputStream newInstance(OutputStream out, int blockSize100k, BitSequenceMonitor.Callback callback) throws IOException { final BitSequenceMonitor monitor = new BitSequenceMonitor(); monitor.setBitSequence(CBZip2InputStream.BLOCK_DELIMITER, DELIMITER_BIT_LENGTH); monitor.setCallback(callback); OutputStream monitorOutputStream = monitor.monitor(out); // YES. we have to write the first 2 bytes!? monitorOutputStream.write('B'); monitorOutputStream.write('Z'); return new BZip2BlockIndexedOutputStream(monitorOutputStream, blockSize100k); } private BZip2BlockIndexedOutputStream(OutputStream outputStream, int blockSize100k) throws IOException { super(outputStream, blockSize100k); } }