Mercurial > 510Connectbot
comparison src/com/jcraft/jzlib/ZInputStream.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 |
33 /** | |
34 * ZInputStream | |
35 * | |
36 * @deprecated use DeflaterOutputStream or InflaterInputStream | |
37 */ | |
38 @Deprecated | |
38 public class ZInputStream extends FilterInputStream { | 39 public class ZInputStream extends FilterInputStream { |
39 | 40 |
40 protected ZStream z = new ZStream(); | 41 protected int flush=JZlib.Z_NO_FLUSH; |
41 protected int bufsize = 512; | 42 protected boolean compress; |
42 protected int flush = JZlib.Z_NO_FLUSH; | 43 protected InputStream in=null; |
43 protected byte[] buf = new byte[bufsize], | |
44 buf1 = new byte[1]; | |
45 protected boolean compress; | |
46 | 44 |
47 protected InputStream in = null; | 45 protected Deflater deflater; |
46 protected InflaterInputStream iis; | |
48 | 47 |
49 public ZInputStream(InputStream in) { | 48 public ZInputStream(InputStream in) throws IOException { |
50 this(in, false); | 49 this(in, false); |
50 } | |
51 public ZInputStream(InputStream in, boolean nowrap) throws IOException { | |
52 super(in); | |
53 iis = new InflaterInputStream(in, nowrap); | |
54 compress=false; | |
55 } | |
56 | |
57 public ZInputStream(InputStream in, int level) throws IOException { | |
58 super(in); | |
59 this.in=in; | |
60 deflater = new Deflater(); | |
61 deflater.init(level); | |
62 compress=true; | |
63 } | |
64 | |
65 private byte[] buf1 = new byte[1]; | |
66 public int read() throws IOException { | |
67 if(read(buf1, 0, 1)==-1) return -1; | |
68 return(buf1[0]&0xFF); | |
69 } | |
70 | |
71 private byte[] buf = new byte[512]; | |
72 | |
73 public int read(byte[] b, int off, int len) throws IOException { | |
74 if(compress){ | |
75 deflater.setOutput(b, off, len); | |
76 while(true){ | |
77 int datalen = in.read(buf, 0, buf.length); | |
78 if(datalen == -1) return -1; | |
79 deflater.setInput(buf, 0, datalen, true); | |
80 int err = deflater.deflate(flush); | |
81 if(deflater.next_out_index>0) | |
82 return deflater.next_out_index; | |
83 if(err == JZlib.Z_STREAM_END) | |
84 return 0; | |
85 if(err == JZlib.Z_STREAM_ERROR || | |
86 err == JZlib.Z_DATA_ERROR){ | |
87 throw new ZStreamException("deflating: "+deflater.msg); | |
88 } | |
89 } | |
51 } | 90 } |
52 public ZInputStream(InputStream in, boolean nowrap) { | 91 else{ |
53 super(in); | 92 return iis.read(b, off, len); |
54 this.in = in; | |
55 z.inflateInit(nowrap); | |
56 compress = false; | |
57 z.next_in = buf; | |
58 z.next_in_index = 0; | |
59 z.avail_in = 0; | |
60 } | 93 } |
94 } | |
61 | 95 |
62 public ZInputStream(InputStream in, int level) { | 96 public long skip(long n) throws IOException { |
63 super(in); | 97 int len=512; |
64 this.in = in; | 98 if(n<len) |
65 z.deflateInit(level); | 99 len=(int)n; |
66 compress = true; | 100 byte[] tmp=new byte[len]; |
67 z.next_in = buf; | 101 return((long)read(tmp)); |
68 z.next_in_index = 0; | 102 } |
69 z.avail_in = 0; | |
70 } | |
71 | 103 |
72 /*public int available() throws IOException { | 104 public int getFlushMode() { |
73 return inf.finished() ? 0 : 1; | 105 return flush; |
74 }*/ | 106 } |
75 | 107 |
76 public int read() throws IOException { | 108 public void setFlushMode(int flush) { |
77 if (read(buf1, 0, 1) == -1) | 109 this.flush=flush; |
78 return (-1); | 110 } |
79 | 111 |
80 return (buf1[0] & 0xFF); | 112 public long getTotalIn() { |
81 } | 113 if(compress) return deflater.total_in; |
114 else return iis.getTotalIn(); | |
115 } | |
82 | 116 |
83 private boolean nomoreinput = false; | 117 public long getTotalOut() { |
118 if(compress) return deflater.total_out; | |
119 else return iis.getTotalOut(); | |
120 } | |
84 | 121 |
85 public int read(byte[] b, int off, int len) throws IOException { | 122 public void close() throws IOException{ |
86 if (len == 0) | 123 if(compress) deflater.end(); |
87 return (0); | 124 else iis.close(); |
88 | 125 } |
89 int err; | |
90 z.next_out = b; | |
91 z.next_out_index = off; | |
92 z.avail_out = len; | |
93 | |
94 do { | |
95 if ((z.avail_in == 0) && (!nomoreinput)) { // if buffer is empty and more input is avaiable, refill it | |
96 z.next_in_index = 0; | |
97 z.avail_in = in.read(buf, 0, bufsize); //(bufsize<z.avail_out ? bufsize : z.avail_out)); | |
98 | |
99 if (z.avail_in == -1) { | |
100 z.avail_in = 0; | |
101 nomoreinput = true; | |
102 } | |
103 } | |
104 | |
105 if (compress) | |
106 err = z.deflate(flush); | |
107 else | |
108 err = z.inflate(flush); | |
109 | |
110 if (nomoreinput && (err == JZlib.Z_BUF_ERROR)) | |
111 return (-1); | |
112 | |
113 if (err != JZlib.Z_OK && err != JZlib.Z_STREAM_END) | |
114 throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg); | |
115 | |
116 if ((nomoreinput || err == JZlib.Z_STREAM_END) && (z.avail_out == len)) | |
117 return (-1); | |
118 } | |
119 while (z.avail_out == len && err == JZlib.Z_OK); | |
120 | |
121 //System.err.print("("+(len-z.avail_out)+")"); | |
122 return (len - z.avail_out); | |
123 } | |
124 | |
125 public long skip(long n) throws IOException { | |
126 int len = 512; | |
127 | |
128 if (n < len) | |
129 len = (int)n; | |
130 | |
131 byte[] tmp = new byte[len]; | |
132 return ((long)read(tmp)); | |
133 } | |
134 | |
135 public int getFlushMode() { | |
136 return (flush); | |
137 } | |
138 | |
139 public void setFlushMode(int flush) { | |
140 this.flush = flush; | |
141 } | |
142 | |
143 /** | |
144 * Returns the total number of bytes input so far. | |
145 */ | |
146 public long getTotalIn() { | |
147 return z.total_in; | |
148 } | |
149 | |
150 /** | |
151 * Returns the total number of bytes output so far. | |
152 */ | |
153 public long getTotalOut() { | |
154 return z.total_out; | |
155 } | |
156 | |
157 public void close() throws IOException { | |
158 in.close(); | |
159 } | |
160 } | 126 } |