Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
//* Licensed Materials - Property of IBM, Miracle A/S, and            *

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

import java.util.zip.GZIPOutputStream;

public class Main {
    public static void writeCompressedData(ByteArrayOutputStream baos, byte[] data) {
        byte[] compressed = getCompressedData(data);
        writeLength(baos, data.length);
        writeData(baos, compressed);
    }

    static byte[] getCompressedData(byte[] data) {
        ByteArrayOutputStream ser = new ByteArrayOutputStream();
        GZIPOutputStream gs;
        try {
            gs = new GZIPOutputStream(ser);
            gs.write(data);
            gs.close();
        } catch (IOException e) {
            throw new RuntimeException("Cannot compress data", e);
        }

        byte[] compressed = ser.toByteArray();
        return compressed;
    }

    public static void writeLength(ByteArrayOutputStream baos, int len) {
        if (len < 0) {
            throw new RuntimeException("Invalid length < 0");
        }
        if (len <= 127) {
            //MSB = 0
            baos.write(len);
        } else if (len <= 16383) {
            // MSB = 10
            int lowbyte = len % 64;
            int highbyte = len / 64;
            baos.write(lowbyte + 128);
            baos.write(highbyte);
        } else if (len <= 2097151) {
            // MSB = 110
            int lowbyte = len % 32;
            int midbyte = (len / 32) % 256;
            int highbyte = len / 32 / 256;
            baos.write(lowbyte + 128 + 64);
            baos.write(midbyte);
            baos.write(highbyte);
        } else {
            throw new RuntimeException("Invalid length > 2^21-1");
        }
    }

    public static void writeData(ByteArrayOutputStream baos, byte[] data) {
        writeLength(baos, data.length);
        baos.write(data, 0, data.length);
    }
}