Deflater.java 2.67 KB
Newer Older
1 2
// Deflater.java - Compress a data stream.

3
/* Copyright (C) 1999  Free Software Foundation
Tom Tromey committed
4 5 6 7 8 9 10 11 12

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

package java.util.zip;

13 14 15 16 17 18 19 20 21 22 23 24
import gnu.gcj.RawData;

/**
 * @author Tom Tromey
 * @date May 17, 1999
 */

/* Written using on-line Java Platform 1.2 API Specification
 * and JCL book.
 * Believed complete and correct.
 */

Tom Tromey committed
25 26
public class Deflater
{
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
  public static final int BEST_COMPRESSION = 9;
  public static final int BEST_SPEED = 1;
  public static final int DEFAULT_COMPRESSION = -1;
  public static final int NO_COMPRESSION = 0;

  public static final int DEFAULT_STRATEGY = 0;
  public static final int FILTERED = 1;
  public static final int HUFFMAN_ONLY = 2;

  public static final int DEFLATED = 8;

  public int deflate (byte[] buf)
  {
    return deflate (buf, 0, buf.length);
  }

  public native int deflate (byte[] buf, int off, int len);
  public native void init (int level, boolean noHeader);
  public native void update ();

  public Deflater ()
  {
    this (DEFAULT_COMPRESSION, false);
  }

  public Deflater (int lvl)
  {
    this (lvl, false);
  }

  public Deflater (int lvl, boolean noHeader)
  {
    this.strategy = DEFAULT_STRATEGY;
    init (lvl, noHeader);
    setLevel (lvl);
  }

  public native void end ();

66
  protected void finalize ()
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
  {
    end ();
  }

  public native void finish ();

  public synchronized boolean finished ()
  {
    return is_finished;
  }

  public native int getAdler ();
  public native int getTotalIn ();
  public native int getTotalOut ();
  public native boolean needsInput ();
  public native void reset ();

  public void setDictionary (byte[] buf)
  {
    setDictionary (buf, 0, buf.length);
  }

  public native void setDictionary (byte[] buf, int off, int len);

  public void setInput (byte[] buf)
  {
    setInput (buf, 0, buf.length);
  }

  public native void setInput (byte[] buf, int off, int len);

  public synchronized void setLevel (int lvl)
  {
    if (lvl != -1 && (lvl < 0 || lvl > 9))
      throw new IllegalArgumentException ();
    level = (lvl == -1) ? 6 : lvl;
    update ();
  }

  public synchronized void setStrategy (int stgy)
  {
    if (stgy != DEFAULT_STRATEGY && stgy != FILTERED
	&& stgy != HUFFMAN_ONLY)
      throw new IllegalArgumentException ();
    strategy = stgy;
    update ();
  }

  // Compression level.
  private int level;

  // Compression strategy.
  private int strategy;

  // The zlib stream.
  private RawData zstream;

  // True if finished.
  private boolean is_finished;

  // `Flush' flag to pass to next call to deflate.
  private int flush_flag;
Tom Tromey committed
129
}