0
|
1 /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
|
|
2 /*
|
357
|
3 Copyright (c) 2011 ymnk, JCraft,Inc. All rights reserved.
|
0
|
4
|
|
5 Redistribution and use in source and binary forms, with or without
|
|
6 modification, are permitted provided that the following conditions are met:
|
|
7
|
|
8 1. Redistributions of source code must retain the above copyright notice,
|
|
9 this list of conditions and the following disclaimer.
|
|
10
|
357
|
11 2. Redistributions in binary form must reproduce the above copyright
|
|
12 notice, this list of conditions and the following disclaimer in
|
0
|
13 the documentation and/or other materials provided with the distribution.
|
|
14
|
|
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.
|
|
17
|
|
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
|
357
|
20 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
21 INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
0
|
22 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
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
|
|
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,
|
|
27 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28 */
|
|
29
|
|
30 package com.jcraft.jzlib;
|
|
31 import java.io.*;
|
|
32
|
357
|
33 /**
|
|
34 * ZInputStream
|
|
35 *
|
|
36 * @deprecated use DeflaterOutputStream or InflaterInputStream
|
|
37 */
|
|
38 @Deprecated
|
0
|
39 public class ZInputStream extends FilterInputStream {
|
|
40
|
357
|
41 protected int flush=JZlib.Z_NO_FLUSH;
|
|
42 protected boolean compress;
|
|
43 protected InputStream in=null;
|
0
|
44
|
357
|
45 protected Deflater deflater;
|
|
46 protected InflaterInputStream iis;
|
0
|
47
|
357
|
48 public ZInputStream(InputStream in) throws IOException {
|
|
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 }
|
0
|
56
|
357
|
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 }
|
0
|
64
|
357
|
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 }
|
0
|
70
|
357
|
71 private byte[] buf = new byte[512];
|
0
|
72
|
357
|
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);
|
0
|
88 }
|
357
|
89 }
|
0
|
90 }
|
357
|
91 else{
|
|
92 return iis.read(b, off, len);
|
|
93 }
|
|
94 }
|
0
|
95
|
357
|
96 public long skip(long n) throws IOException {
|
|
97 int len=512;
|
|
98 if(n<len)
|
|
99 len=(int)n;
|
|
100 byte[] tmp=new byte[len];
|
|
101 return((long)read(tmp));
|
|
102 }
|
0
|
103
|
357
|
104 public int getFlushMode() {
|
|
105 return flush;
|
|
106 }
|
0
|
107
|
357
|
108 public void setFlushMode(int flush) {
|
|
109 this.flush=flush;
|
|
110 }
|
0
|
111
|
357
|
112 public long getTotalIn() {
|
|
113 if(compress) return deflater.total_in;
|
|
114 else return iis.getTotalIn();
|
|
115 }
|
0
|
116
|
357
|
117 public long getTotalOut() {
|
|
118 if(compress) return deflater.total_out;
|
|
119 else return iis.getTotalOut();
|
|
120 }
|
0
|
121
|
357
|
122 public void close() throws IOException{
|
|
123 if(compress) deflater.end();
|
|
124 else iis.close();
|
|
125 }
|
0
|
126 }
|