user10386436
user10386436

Reputation:

Java - How to do Gzip compression of java object

How to compress a Java pojo object using Gzip?

Below code compress a string -

public static String compress(String str, String inEncoding) {
        if (str == null || str.length() == 0) {
            return str;
        }
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip = new GZIPOutputStream(out);
            gzip.write(str.getBytes(inEncoding));
            gzip.close();
            return URLEncoder.encode(out.toString("ISO-8859-1"), "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Instead of String str as a parameter, how to use below pojo class object (Client cc) and compress?

Pojo class -

Class client {
Public string name;
Public string location;
//Getter and setter methods
}

How can i compress and decompress this client pojo class using gzip.?

Upvotes: 1

Views: 6416

Answers (1)

papaya
papaya

Reputation: 1535

You can compress your Client class which implements serializable using gzip by doing the following :

public static bytes[] compressThis(Client client){
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  GZIPOutputStream gzipOut = new GZIPOutputStream(client);
  ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut);
  objectOut.writeObject(client);
  objectOut.close();
  return baos.toByteArray();
}

Following which you can decompress it by doing the following :

public static getClientFrom(bytes[] bytes){
  ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
  GZIPInputStream gzipIn = new GZIPInputStream(bais);
  ObjectInputStream objectIn = new ObjectInputStream(gzipIn);
  Client client = (Client) objectIn.readObject();
  objectIn.close();
  return client;
}

Upvotes: 4

Related Questions