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();
+  }
 }