Mercurial > 510Connectbot
comparison src/com/jcraft/jzlib/ZOutputStream.java @ 357:46c2115ae1c8
update jzlib to a21be20213d66eff15904d925e9b721956a01ef7
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Fri, 01 Aug 2014 13:34:58 -0700 |
parents | 0ce5cc452d02 |
children |
comparison
equal
deleted
inserted
replaced
356:5e91b559b5fe | 357:46c2115ae1c8 |
---|---|
1 /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ | 1 /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ |
2 /* | 2 /* |
3 Copyright (c) 2001 Lapo Luchini. | 3 Copyright (c) 2011 ymnk, JCraft,Inc. All rights reserved. |
4 | 4 |
5 Redistribution and use in source and binary forms, with or without | 5 Redistribution and use in source and binary forms, with or without |
6 modification, are permitted provided that the following conditions are met: | 6 modification, are permitted provided that the following conditions are met: |
7 | 7 |
8 1. Redistributions of source code must retain the above copyright notice, | 8 1. Redistributions of source code must retain the above copyright notice, |
9 this list of conditions and the following disclaimer. | 9 this list of conditions and the following disclaimer. |
10 | 10 |
11 2. Redistributions in binary form must reproduce the above copyright | 11 2. Redistributions in binary form must reproduce the above copyright |
12 notice, this list of conditions and the following disclaimer in | 12 notice, this list of conditions and the following disclaimer in |
13 the documentation and/or other materials provided with the distribution. | 13 the documentation and/or other materials provided with the distribution. |
14 | 14 |
15 3. The names of the authors may not be used to endorse or promote products | 15 3. The names of the authors may not be used to endorse or promote products |
16 derived from this software without specific prior written permission. | 16 derived from this software without specific prior written permission. |
17 | 17 |
18 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, | 18 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, |
19 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | 19 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
20 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS | 20 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, |
21 OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, | 21 INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, |
22 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 22 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
23 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | 23 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, |
24 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 24 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
25 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 25 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
26 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | 26 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
27 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 27 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
28 */ | 28 */ |
29 /* | |
30 * This program is based on zlib-1.1.3, so all credit should go authors | |
31 * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) | |
32 * and contributors of zlib. | |
33 */ | |
34 | 29 |
35 package com.jcraft.jzlib; | 30 package com.jcraft.jzlib; |
36 import java.io.*; | 31 import java.io.*; |
37 | 32 |
38 public class ZOutputStream extends OutputStream { | 33 /** |
34 * ZOutputStream | |
35 * | |
36 * @deprecated use DeflaterOutputStream or InflaterInputStream | |
37 */ | |
38 @Deprecated | |
39 public class ZOutputStream extends FilterOutputStream { | |
39 | 40 |
40 protected ZStream z = new ZStream(); | 41 protected int bufsize=512; |
41 protected int bufsize = 512; | 42 protected int flush=JZlib.Z_NO_FLUSH; |
42 protected int flush = JZlib.Z_NO_FLUSH; | 43 protected byte[] buf=new byte[bufsize]; |
43 protected byte[] buf = new byte[bufsize], | 44 protected boolean compress; |
44 buf1 = new byte[1]; | |
45 protected boolean compress; | |
46 | 45 |
47 protected OutputStream out; | 46 protected OutputStream out; |
47 private boolean end=false; | |
48 | 48 |
49 public ZOutputStream(OutputStream out) { | 49 private DeflaterOutputStream dos; |
50 super(); | 50 private Inflater inflater; |
51 this.out = out; | 51 |
52 z.inflateInit(); | 52 public ZOutputStream(OutputStream out) throws IOException { |
53 compress = false; | 53 super(out); |
54 this.out=out; | |
55 inflater = new Inflater(); | |
56 inflater.init(); | |
57 compress=false; | |
58 } | |
59 | |
60 public ZOutputStream(OutputStream out, int level) throws IOException { | |
61 this(out, level, false); | |
62 } | |
63 | |
64 public ZOutputStream(OutputStream out, int level, boolean nowrap) throws IOException { | |
65 super(out); | |
66 this.out=out; | |
67 Deflater deflater = new Deflater(level, nowrap); | |
68 dos = new DeflaterOutputStream(out, deflater); | |
69 compress=true; | |
70 } | |
71 | |
72 private byte[] buf1 = new byte[1]; | |
73 public void write(int b) throws IOException { | |
74 buf1[0]=(byte)b; | |
75 write(buf1, 0, 1); | |
76 } | |
77 | |
78 public void write(byte b[], int off, int len) throws IOException { | |
79 if(len==0) return; | |
80 if(compress){ | |
81 dos.write(b, off, len); | |
54 } | 82 } |
83 else { | |
84 inflater.setInput(b, off, len, true); | |
85 int err = JZlib.Z_OK; | |
86 while(inflater.avail_in>0){ | |
87 inflater.setOutput(buf, 0, buf.length); | |
88 err = inflater.inflate(flush); | |
89 if(inflater.next_out_index>0) | |
90 out.write(buf, 0, inflater.next_out_index); | |
91 if(err != JZlib.Z_OK) | |
92 break; | |
93 } | |
94 if(err != JZlib.Z_OK) | |
95 throw new ZStreamException("inflating: "+inflater.msg); | |
96 return; | |
97 } | |
98 } | |
55 | 99 |
56 public ZOutputStream(OutputStream out, int level) { | 100 public int getFlushMode() { |
57 this(out, level, false); | 101 return flush; |
102 } | |
103 | |
104 public void setFlushMode(int flush) { | |
105 this.flush=flush; | |
106 } | |
107 | |
108 public void finish() throws IOException { | |
109 int err; | |
110 if(compress){ | |
111 int tmp = flush; | |
112 int flush = JZlib.Z_FINISH; | |
113 try{ | |
114 write("".getBytes(), 0, 0); | |
115 } | |
116 finally { flush = tmp; } | |
58 } | 117 } |
59 public ZOutputStream(OutputStream out, int level, boolean nowrap) { | 118 else{ |
60 super(); | 119 dos.finish(); |
61 this.out = out; | |
62 z.deflateInit(level, nowrap); | |
63 compress = true; | |
64 } | 120 } |
121 flush(); | |
122 } | |
123 public synchronized void end() { | |
124 if(end) return; | |
125 if(compress){ | |
126 try { dos.finish(); } catch(Exception e){} | |
127 } | |
128 else{ | |
129 inflater.end(); | |
130 } | |
131 end=true; | |
132 } | |
133 public void close() throws IOException { | |
134 try{ | |
135 try{finish();} | |
136 catch (IOException ignored) {} | |
137 } | |
138 finally{ | |
139 end(); | |
140 out.close(); | |
141 out=null; | |
142 } | |
143 } | |
65 | 144 |
66 public void write(int b) throws IOException { | 145 public long getTotalIn() { |
67 buf1[0] = (byte)b; | 146 if(compress) return dos.getTotalIn(); |
68 write(buf1, 0, 1); | 147 else return inflater.total_in; |
69 } | 148 } |
70 | 149 |
71 public void write(byte b[], int off, int len) throws IOException { | 150 public long getTotalOut() { |
72 if (len == 0) | 151 if(compress) return dos.getTotalOut(); |
73 return; | 152 else return inflater.total_out; |
153 } | |
74 | 154 |
75 int err; | 155 public void flush() throws IOException { |
76 z.next_in = b; | 156 out.flush(); |
77 z.next_in_index = off; | 157 } |
78 z.avail_in = len; | |
79 | |
80 do { | |
81 z.next_out = buf; | |
82 z.next_out_index = 0; | |
83 z.avail_out = bufsize; | |
84 | |
85 if (compress) | |
86 err = z.deflate(flush); | |
87 else | |
88 err = z.inflate(flush); | |
89 | |
90 if (err != JZlib.Z_OK) | |
91 throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg); | |
92 | |
93 out.write(buf, 0, bufsize - z.avail_out); | |
94 } | |
95 while (z.avail_in > 0 || z.avail_out == 0); | |
96 } | |
97 | |
98 public int getFlushMode() { | |
99 return (flush); | |
100 } | |
101 | |
102 public void setFlushMode(int flush) { | |
103 this.flush = flush; | |
104 } | |
105 | |
106 public void finish() throws IOException { | |
107 int err; | |
108 | |
109 do { | |
110 z.next_out = buf; | |
111 z.next_out_index = 0; | |
112 z.avail_out = bufsize; | |
113 | |
114 if (compress) { err = z.deflate(JZlib.Z_FINISH); } | |
115 else { err = z.inflate(JZlib.Z_FINISH); } | |
116 | |
117 if (err != JZlib.Z_STREAM_END && err != JZlib.Z_OK) | |
118 throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg); | |
119 | |
120 if (bufsize - z.avail_out > 0) { | |
121 out.write(buf, 0, bufsize - z.avail_out); | |
122 } | |
123 } | |
124 while (z.avail_in > 0 || z.avail_out == 0); | |
125 | |
126 flush(); | |
127 } | |
128 public void end() { | |
129 if (z == null) | |
130 return; | |
131 | |
132 if (compress) { z.deflateEnd(); } | |
133 else { z.inflateEnd(); } | |
134 | |
135 z.free(); | |
136 z = null; | |
137 } | |
138 public void close() throws IOException { | |
139 try { | |
140 try {finish();} | |
141 catch (IOException ignored) {} | |
142 } | |
143 finally { | |
144 end(); | |
145 out.close(); | |
146 out = null; | |
147 } | |
148 } | |
149 | |
150 /** | |
151 * Returns the total number of bytes input so far. | |
152 */ | |
153 public long getTotalIn() { | |
154 return z.total_in; | |
155 } | |
156 | |
157 /** | |
158 * Returns the total number of bytes output so far. | |
159 */ | |
160 public long getTotalOut() { | |
161 return z.total_out; | |
162 } | |
163 | |
164 public void flush() throws IOException { | |
165 out.flush(); | |
166 } | |
167 | 158 |
168 } | 159 } |