KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jruby > util > ZlibInflate


1 /***** BEGIN LICENSE BLOCK *****
2  * Version: CPL 1.0/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Common Public
5  * License Version 1.0 (the "License"); you may not use this file
6  * except in compliance with the License. You may obtain a copy of
7  * the License at http://www.eclipse.org/legal/cpl-v10.html
8  *
9  * Software distributed under the License is distributed on an "AS
10  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11  * implied. See the License for the specific language governing
12  * rights and limitations under the License.
13  *
14  * Copyright (C) 2006 Ola Bini <ola.bini@ki.se>
15  * Copyright (C) 2006 Dave Brosius <dbrosius@mebigfatguy.com>
16  *
17  * Alternatively, the contents of this file may be used under the terms of
18  * either of the GNU General Public License Version 2 or later (the "GPL"),
19  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20  * in which case the provisions of the GPL or the LGPL are applicable instead
21  * of those above. If you wish to allow use of your version of this file only
22  * under the terms of either the GPL or the LGPL, and not to allow others to
23  * use your version of this file under the terms of the CPL, indicate your
24  * decision by deleting the provisions above and replace them with the notice
25  * and other provisions required by the GPL or the LGPL. If you do not delete
26  * the provisions above, a recipient may use your version of this file under
27  * the terms of any one of the CPL, the GPL or the LGPL.
28  ***** END LICENSE BLOCK *****/

29 package org.jruby.util;
30
31 import java.io.UnsupportedEncodingException JavaDoc;
32
33 import java.util.zip.DataFormatException JavaDoc;
34 import java.util.zip.Inflater JavaDoc;
35
36 import org.jruby.Ruby;
37 import org.jruby.RubyString;
38 import org.jruby.runtime.builtin.IRubyObject;
39
40 public class ZlibInflate {
41     private Inflater JavaDoc flater;
42     private ByteList collected;
43     private Ruby runtime;
44
45     public static final int BASE_SIZE = 100;
46
47     public ZlibInflate(IRubyObject caller) {
48         super();
49         flater = new Inflater JavaDoc(false);
50         collected = new ByteList(BASE_SIZE);
51         runtime = caller.getRuntime();
52     }
53
54     public static IRubyObject s_inflate(IRubyObject caller, ByteList str)
55         throws DataFormatException JavaDoc {
56         ZlibInflate zstream = new ZlibInflate(caller);
57         IRubyObject result = zstream.inflate(str);
58         zstream.finish();
59         zstream.close();
60         return result;
61     }
62
63     public Inflater JavaDoc getInflater() {
64         return flater;
65     }
66
67     public void append(IRubyObject obj) {
68         append(obj.convertToString().getByteList());
69     }
70
71     public void append(ByteList obj) {
72         collected.append(obj);
73     }
74
75     public IRubyObject sync_point() {
76         return runtime.getFalse();
77     }
78
79     public IRubyObject set_dictionary(IRubyObject str) throws UnsupportedEncodingException JavaDoc {
80         flater.setDictionary(str.convertToString().getBytes());
81         return str;
82     }
83
84     public IRubyObject inflate(ByteList str) throws DataFormatException JavaDoc {
85         if (null != str) {
86             append(str);
87         }
88         ByteList result = new ByteList(collected.realSize);
89         byte[] outp = new byte[1024];
90         ByteList buf = collected;
91         collected = new ByteList(BASE_SIZE);
92         flater.setInput(buf.bytes,0,buf.realSize);
93         int resultLength = -1;
94         while (!flater.finished() && resultLength != 0) {
95             resultLength = flater.inflate(outp);
96             result.append(outp, 0, resultLength);
97         }
98         return RubyString.newString(runtime, result);
99     }
100
101     public IRubyObject sync(IRubyObject str) {
102         append(str);
103         return runtime.getFalse();
104     }
105
106     public void finish() {
107         flater.end();
108     }
109     
110     public void close() {
111     }
112 }
113
Popular Tags