German English
Datenverarbeitung

GZIP - Kompression/Dekompression

In diesem Beispiel wird ein Datenblock mit einer Länge von 1024 Byte komprimiert. Für die Kompression der Textnachricht (Lorem_ipsum_1024) wird der Gzip-Algorithmus aus der im Internet verfügbaren Bibliothek "compress_j2me" verwendet. Diese Bibliothek wurde ursprünglich für Mobiltelefone mit Java ME entwickelt. Diese Bibliothek kann auch auf dem Funkmodul Preon32 eingesetzt werden. Eine Kompression von Daten ist immer dann sinnvoll, wenn eine Kommunikation in geringer Zeit oder sehr ressourcenminimal verlaufen darf. In diesem Beispiel wird die Textnachricht auf 396 Byte reduziert. Für den Fall, dass eine IEEE 802.15.4 Funknachricht einen angenommen Payload von 103 Bytes hat, dann müssen durch die Kompression nur 4 statt 10 Nachrichten verschickt werden. Im Empfänger erfolgt die Dekompression, die für das Beispiel in einem Programm zusammengefasst wurde.
/*
 * Copyright (c) 2011., Virtenio GmbH
 * All rights reserved.
 */

package com.virtenio.webdemo;

import com.googlecode.compress_j2me.gzip.Gzip;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class GzipCompressDecompress {

    private final static String Lorem_ipsum_1024 =
            "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy " +
            "eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam " +
            "voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet " +
            "clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit " +
            "amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam " +
            "nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
            "sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum." +
            "Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor " +
            "sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed " +
            "diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat," +
            "sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum." +
            "Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor " +
            "sit amet. \n" +
            "\n" +
            "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse " +
            "molestie consequat, vel illum dolore eu feugiat nulla facilisis a";

    public static void main(String[] args) {

        byte[] original = Lorem_ipsum_1024.getBytes();  // 1024 bytes total

        // Compress data with gzip
        byte[] compressed = new byte[0];
        try {
            ByteArrayInputStream in1 = new ByteArrayInputStream(original);
            ByteArrayOutputStream out1 = new ByteArrayOutputStream();
            int num1 = Gzip.gzip(in1, out1);
            compressed = out1.toByteArray();            // 396 bytes total
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Decompress data with gzip 
        byte[] decompressed = new byte[0];
        try {
            ByteArrayInputStream in2 = new ByteArrayInputStream(compressed);
            ByteArrayOutputStream out2 = new ByteArrayOutputStream();
            Gzip num2 = Gzip.gunzip(in2, out2);
            decompressed = out2.toByteArray();          // 1024 bytes total
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}