1 52 53 package com.go.trove.util; 54 55 import java.io.*; 56 57 65 public class DeflaterOutputStream extends FilterOutputStream { 66 protected Deflater mDeflater; 67 protected byte[] mBuffer; 68 69 public DeflaterOutputStream(OutputStream out, Deflater def, byte[] buf) { 70 super(out); 71 mDeflater = def; 72 mBuffer = buf; 73 } 74 75 public DeflaterOutputStream(OutputStream out, Deflater def, int size) { 76 this(out, def, new byte[size]); 77 } 78 79 public DeflaterOutputStream(OutputStream out, Deflater def) { 80 this(out, def, 512); 81 } 82 83 public DeflaterOutputStream(OutputStream out) { 84 this(out, new Deflater()); 85 } 86 87 public void write(int b) throws IOException { 88 write(new byte[]{(byte)b}, 0, 1); 89 } 90 91 public void write(byte[] b, int off, int len) throws IOException { 92 if (mDeflater.finished()) { 93 throw new IOException("write beyond end of stream"); 94 } 95 mDeflater.setInput(b, off, len); 96 while (!mDeflater.needsInput()) { 97 deflate(); 98 } 99 } 100 101 public void flush() throws IOException { 102 if (!mDeflater.finished()) { 103 mDeflater.flush(); 104 int len; 105 do { 106 len = deflate(); 107 } while (len == mBuffer.length); 108 } 109 } 110 111 public void fullFlush() throws IOException { 112 if (!mDeflater.finished()) { 113 mDeflater.fullFlush(); 114 int len; 115 do { 116 len = deflate(); 117 } while (len == mBuffer.length); 118 } 119 } 120 121 public void finish() throws IOException { 122 if (!mDeflater.finished()) { 123 mDeflater.finish(); 124 do { 125 deflate(); 126 } while (!mDeflater.finished()); 127 } 128 } 129 130 public void close() throws IOException { 131 finish(); 132 super.close(); 133 } 134 135 private int deflate() throws IOException { 136 int len = mDeflater.deflate(mBuffer, 0, mBuffer.length); 137 if (len > 0) { 138 out.write(mBuffer, 0, len); 139 } 140 return len; 141 } 142 } 143 | Popular Tags |