Mercurial > 510Connectbot
diff 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 |
line wrap: on
line diff
--- a/src/com/jcraft/jzlib/ZInputStream.java Fri Aug 01 11:57:17 2014 -0700 +++ b/src/com/jcraft/jzlib/ZInputStream.java Fri Aug 01 13:34:58 2014 -0700 @@ -1,6 +1,6 @@ /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */ /* -Copyright (c) 2001 Lapo Luchini. +Copyright (c) 2011 ymnk, JCraft,Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -8,8 +8,8 @@ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names of the authors may not be used to endorse or promote products @@ -17,8 +17,8 @@ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS -OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF @@ -26,135 +26,101 @@ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * This program is based on zlib-1.1.3, so all credit should go authors - * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) - * and contributors of zlib. - */ package com.jcraft.jzlib; import java.io.*; +/** + * ZInputStream + * + * @deprecated use DeflaterOutputStream or InflaterInputStream + */ +@Deprecated public class ZInputStream extends FilterInputStream { - protected ZStream z = new ZStream(); - protected int bufsize = 512; - protected int flush = JZlib.Z_NO_FLUSH; - protected byte[] buf = new byte[bufsize], - buf1 = new byte[1]; - protected boolean compress; + protected int flush=JZlib.Z_NO_FLUSH; + protected boolean compress; + protected InputStream in=null; - protected InputStream in = null; + protected Deflater deflater; + protected InflaterInputStream iis; - public ZInputStream(InputStream in) { - this(in, false); - } - public ZInputStream(InputStream in, boolean nowrap) { - super(in); - this.in = in; - z.inflateInit(nowrap); - compress = false; - z.next_in = buf; - z.next_in_index = 0; - z.avail_in = 0; - } + public ZInputStream(InputStream in) throws IOException { + this(in, false); + } + public ZInputStream(InputStream in, boolean nowrap) throws IOException { + super(in); + iis = new InflaterInputStream(in, nowrap); + compress=false; + } - public ZInputStream(InputStream in, int level) { - super(in); - this.in = in; - z.deflateInit(level); - compress = true; - z.next_in = buf; - z.next_in_index = 0; - z.avail_in = 0; - } - - /*public int available() throws IOException { - return inf.finished() ? 0 : 1; - }*/ - - public int read() throws IOException { - if (read(buf1, 0, 1) == -1) - return (-1); + public ZInputStream(InputStream in, int level) throws IOException { + super(in); + this.in=in; + deflater = new Deflater(); + deflater.init(level); + compress=true; + } - return (buf1[0] & 0xFF); - } - - private boolean nomoreinput = false; - - public int read(byte[] b, int off, int len) throws IOException { - if (len == 0) - return (0); + private byte[] buf1 = new byte[1]; + public int read() throws IOException { + if(read(buf1, 0, 1)==-1) return -1; + return(buf1[0]&0xFF); + } - int err; - z.next_out = b; - z.next_out_index = off; - z.avail_out = len; - - do { - if ((z.avail_in == 0) && (!nomoreinput)) { // if buffer is empty and more input is avaiable, refill it - z.next_in_index = 0; - z.avail_in = in.read(buf, 0, bufsize); //(bufsize<z.avail_out ? bufsize : z.avail_out)); + private byte[] buf = new byte[512]; - if (z.avail_in == -1) { - z.avail_in = 0; - nomoreinput = true; - } - } - - if (compress) - err = z.deflate(flush); - else - err = z.inflate(flush); - - if (nomoreinput && (err == JZlib.Z_BUF_ERROR)) - return (-1); - - if (err != JZlib.Z_OK && err != JZlib.Z_STREAM_END) - throw new ZStreamException((compress ? "de" : "in") + "flating: " + z.msg); - - if ((nomoreinput || err == JZlib.Z_STREAM_END) && (z.avail_out == len)) - return (-1); + public int read(byte[] b, int off, int len) throws IOException { + if(compress){ + deflater.setOutput(b, off, len); + while(true){ + int datalen = in.read(buf, 0, buf.length); + if(datalen == -1) return -1; + deflater.setInput(buf, 0, datalen, true); + int err = deflater.deflate(flush); + if(deflater.next_out_index>0) + return deflater.next_out_index; + if(err == JZlib.Z_STREAM_END) + return 0; + if(err == JZlib.Z_STREAM_ERROR || + err == JZlib.Z_DATA_ERROR){ + throw new ZStreamException("deflating: "+deflater.msg); } - while (z.avail_out == len && err == JZlib.Z_OK); - - //System.err.print("("+(len-z.avail_out)+")"); - return (len - z.avail_out); + } } - - public long skip(long n) throws IOException { - int len = 512; + else{ + return iis.read(b, off, len); + } + } - if (n < len) - len = (int)n; - - byte[] tmp = new byte[len]; - return ((long)read(tmp)); - } + public long skip(long n) throws IOException { + int len=512; + if(n<len) + len=(int)n; + byte[] tmp=new byte[len]; + return((long)read(tmp)); + } - public int getFlushMode() { - return (flush); - } + public int getFlushMode() { + return flush; + } - public void setFlushMode(int flush) { - this.flush = flush; - } + public void setFlushMode(int flush) { + this.flush=flush; + } - /** - * Returns the total number of bytes input so far. - */ - public long getTotalIn() { - return z.total_in; - } + public long getTotalIn() { + if(compress) return deflater.total_in; + else return iis.getTotalIn(); + } - /** - * Returns the total number of bytes output so far. - */ - public long getTotalOut() { - return z.total_out; - } + public long getTotalOut() { + if(compress) return deflater.total_out; + else return iis.getTotalOut(); + } - public void close() throws IOException { - in.close(); - } + public void close() throws IOException{ + if(compress) deflater.end(); + else iis.close(); + } }