GlueGen v2.6.0-rc-20250712
GlueGen, Native Binding Generator for Java™ (public API).
CustomDeflate.java
Go to the documentation of this file.
1/**
2 * Copyright 2015 JogAmp Community. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification, are
5 * permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of
8 * conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
15 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
24 * The views and conclusions contained in the software and documentation are those of the
25 * authors and should not be interpreted as representing official policies, either expressed
26 * or implied, of JogAmp Community.
27 */
28package com.jogamp.common.util;
29
30import java.io.File;
31import java.io.FileInputStream;
32import java.io.FileOutputStream;
33import java.io.IOException;
34import java.io.InputStream;
35import java.io.OutputStream;
36
37public class CustomDeflate {
38 public static void main(final String[] args) {
39 if (args.length != 2) {
40 System.err.println("Usage: java "+CustomDeflate.class.getName()+" file-in file-out");
41 } else {
42 final File fileIn = new File(args[0]);
43 final File fileOut = new File(args[1]);
44 final int inSize;
45 {
46 final long _inSize = fileIn.length();
47 if( 0 >= _inSize || _inSize > Integer.MAX_VALUE ) {
48 throw new IllegalArgumentException("");
49 }
50 inSize = (int) _inSize;
51 }
52 final byte[] input = new byte[inSize];
53 InputStream in = null;
54 OutputStream out = null;
55 try {
56 in = new FileInputStream(fileIn);
57 int numBytes = 0;
58 try {
59 while (true) {
60 final int remBytes = inSize - numBytes;
61 int count;
62 if ( 0 >= remBytes || (count = in.read(input, numBytes, remBytes)) == -1 ) {
63 break;
64 }
65 numBytes += count;
66 }
67 } finally {
68 in.close();
69 }
70 if( inSize != numBytes ) {
71 throw new IOException("Got "+numBytes+" bytes != expected "+inSize);
72 }
73 out = new FileOutputStream(fileOut);
74 CustomCompress.deflateToStream(input, 0, inSize, 9, out);
75 } catch (final IOException ioe) {
76 ioe.printStackTrace();
77 } finally {
78 if( null != in ) {
79 try { in.close(); } catch (final IOException e) { }
80 }
81 if( null != out ) {
82 try { out.close(); } catch (final IOException e) { }
83 }
84 }
85
86 //
87 // Test
88 //
89 in = null;
90 out = null;
91 try {
92 in = new FileInputStream(fileOut);
93 final byte[] compare = CustomCompress.inflateFromStream(in);
94 if( compare.length != inSize ) {
95 throw new InternalError("Inflated Size Mismatch: Has "+compare.length+", expected "+inSize);
96 }
97 for(int i=0; i<inSize; i++) {
98 if( input[i] != compare[i] ) {
99 throw new InternalError("Inflated Bytes Mismatch at "+i+"/"+inSize+": Has "+Integer.toHexString(compare[i])+", expected "+Integer.toHexString(input[i]));
100 }
101 }
102 } catch (final IOException ioe) {
103 ioe.printStackTrace();
104 } finally {
105 if( null != in ) {
106 try { in.close(); } catch (final IOException e) { }
107 }
108 if( null != out ) {
109 try { out.close(); } catch (final IOException e) { }
110 }
111 }
112 }
113 }
114
115}
All in memory inflater / deflator for small chunks using streams.
static byte[] inflateFromStream(final InputStream in)
static int deflateToStream(final byte[] input, final int inOff, final int inLen, final int level, final OutputStream out)
static void main(final String[] args)