void Finish() { // Console.WriteLine("BZip2:Finish"); try { var totalBefore = this.bw.TotalBytesWrittenOut; this.compressor.CompressAndWrite(); TraceOutput(TraceBits.Write,"out block length (bytes): {0} (0x{0:X})", this.bw.TotalBytesWrittenOut - totalBefore); TraceOutput(TraceBits.Crc, " combined CRC (before): {0:X8}", this.combinedCRC); this.combinedCRC = (this.combinedCRC << 1) | (this.combinedCRC >> 31); this.combinedCRC ^= (uint) compressor.Crc32; TraceOutput(TraceBits.Crc, " block CRC : {0:X8}", this.compressor.Crc32); TraceOutput(TraceBits.Crc, " combined CRC (final) : {0:X8}", this.combinedCRC); EmitTrailer(); } finally { this.output = null; this.compressor = null; this.bw = null; } }
public WorkItem(int ix, int blockSize) { // compressed data gets written to a MemoryStream this.ms = new MemoryStream(); this.bw = new BitWriter(ms); this.Compressor = new BZip2Compressor(bw, blockSize); this.index = ix; }
/// <summary> /// Constructs a new <c>BZip2OutputStream</c> with specified blocksize, /// and explicitly specifies whether to leave the wrapped stream open. /// </summary> /// /// <param name = "output">the destination stream.</param> /// <param name = "blockSize"> /// The blockSize in units of 100000 bytes. /// The valid range is 1..9. /// </param> /// <param name = "leaveOpen"> /// whether to leave the captive stream open upon closing this stream. /// </param> public BZip2OutputStream(Stream output, int blockSize, bool leaveOpen) { if (blockSize < BZip2.MinBlockSize || blockSize > BZip2.MaxBlockSize) { var msg = String.Format("blockSize={0} is out of range; must be between {1} and {2}", blockSize, BZip2.MinBlockSize, BZip2.MaxBlockSize); throw new ArgumentException(msg, "blockSize"); } this.output = output; if (!this.output.CanWrite) throw new ArgumentException("The stream is not writable.", "output"); this.bw = new BitWriter(this.output); this.blockSize100k = blockSize; this.compressor = new BZip2Compressor(this.bw, blockSize); this.leaveOpen = leaveOpen; this.combinedCRC = 0; EmitHeader(); }