Recently i’m developing a simple client server application, using serialized java objects as parameter. To increase performance, im trying to compress my java object. Here’s how i do it.
a simple serialized java bean
package com.edw.bean;
import java.io.Serializable;
import java.math.BigDecimal;
public class TestBean implements Serializable {
private BigDecimal id;
private String value;
public BigDecimal getId() {
return id;
}
public void setId(BigDecimal id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
and a class to compress my object
package com.edw.main;
import com.edw.bean.TestBean;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigDecimal;
import java.util.zip.Deflater;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.log4j.Logger;
public class Main {
private final static Logger logger = Logger.getLogger(Main.class);
public Main() {
}
private void startApp() throws Exception {
// create a very big bean
TestBean tb = new TestBean();
tb.setId(new BigDecimal(Double.MAX_VALUE));
String bigString = "";
for (int i = 0; i < 5000; i++) {
bigString += " test " + i;
}
tb.setValue(bigString);
// write it to file to see this object's size
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("test.size"), false));
oos.writeObject(tb);
oos.flush();
oos.close();
// get the serialized object
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("test.size")));
Object regularObject = ois.readObject();
logger.debug(((TestBean) regularObject).getId());
// write compressed object to file to see this object's size
FileOutputStream fos = new FileOutputStream(new File("testCompressed.size"), false);
GZIPOutputStream gzipos = new GZIPOutputStream(fos) {
{
def.setLevel(Deflater.BEST_COMPRESSION);
}
};
ObjectOutputStream oosCompressed = new ObjectOutputStream(gzipos);
oosCompressed.writeObject(tb);
oosCompressed.flush();
oosCompressed.close();
// get the serialized object
FileInputStream fis = new FileInputStream(new File("testCompressed.size"));
GZIPInputStream gzipis = new GZIPInputStream(fis);
ObjectInputStream oisCompressed = new ObjectInputStream(gzipis);
Object compressedObject = oisCompressed.readObject();
logger.debug(((TestBean) compressedObject).getId());
}
public static void main(String[] args) throws Exception {
Main main = new Main();
main.startApp();
}
}
it can compress up to 75% of size,

Thank you and have a good time coding. (*)