1 2 29 34 35 package com.jcraft.jzlib; 36 import java.io.*; 37 38 public class ZOutputStream extends OutputStream { 39 40 protected ZStream z=new ZStream(); 41 protected int bufsize=512; 42 protected int flush=JZlib.Z_NO_FLUSH; 43 protected byte[] buf=new byte[bufsize], 44 buf1=new byte[1]; 45 protected boolean compress; 46 47 protected OutputStream out; 48 49 public ZOutputStream(OutputStream out) { 50 super(); 51 this.out=out; 52 z.inflateInit(); 53 compress=false; 54 } 55 56 public ZOutputStream(OutputStream out, int level) { 57 this(out, level, false); 58 } 59 public ZOutputStream(OutputStream out, int level, boolean nowrap) { 60 super(); 61 this.out=out; 62 z.deflateInit(level, nowrap); 63 compress=true; 64 } 65 66 public void write(int b) throws IOException { 67 buf1[0]=(byte)b; 68 write(buf1, 0, 1); 69 } 70 71 public void write(byte b[], int off, int len) throws IOException { 72 if(len==0) 73 return; 74 int err; 75 z.next_in=b; 76 z.next_in_index=off; 77 z.avail_in=len; 78 do{ 79 z.next_out=buf; 80 z.next_out_index=0; 81 z.avail_out=bufsize; 82 if(compress) 83 err=z.deflate(flush); 84 else 85 err=z.inflate(flush); 86 if(err!=JZlib.Z_OK) 87 throw new ZStreamException((compress?"de":"in")+"flating: "+z.msg); 88 out.write(buf, 0, bufsize-z.avail_out); 89 } 90 while(z.avail_in>0 || z.avail_out==0); 91 } 92 93 public int getFlushMode() { 94 return(flush); 95 } 96 97 public void setFlushMode(int flush) { 98 this.flush=flush; 99 } 100 101 public void finish() throws IOException { 102 int err; 103 do{ 104 z.next_out=buf; 105 z.next_out_index=0; 106 z.avail_out=bufsize; 107 if(compress){ err=z.deflate(JZlib.Z_FINISH); } 108 else{ err=z.inflate(JZlib.Z_FINISH); } 109 if(err!=JZlib.Z_STREAM_END && err != JZlib.Z_OK) 110 throw new ZStreamException((compress?"de":"in")+"flating: "+z.msg); 111 if(bufsize-z.avail_out>0){ 112 out.write(buf, 0, bufsize-z.avail_out); 113 } 114 } 115 while(z.avail_in>0 || z.avail_out==0); 116 flush(); 117 } 118 public void end() { 119 if(z==null) 120 return; 121 if(compress){ z.deflateEnd(); } 122 else{ z.inflateEnd(); } 123 z.free(); 124 z=null; 125 } 126 public void close() throws IOException { 127 try{ 128 try{finish();} 129 catch (IOException ignored) {} 130 } 131 finally{ 132 end(); 133 out.close(); 134 out=null; 135 } 136 } 137 138 141 public long getTotalIn() { 142 return z.total_in; 143 } 144 145 148 public long getTotalOut() { 149 return z.total_out; 150 } 151 152 public void flush() throws IOException { 153 out.flush(); 154 } 155 156 } 157 | Popular Tags |