结论:序列化比BASE64消耗多
package net.tianyu.sample;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.apache.commons.codec.binary.Base64;
public class TestSerialize implements Serializable {
private static final long serialVersionUID = 282679798530248147L;
private static final String ENCODE_CHART_SET = "UTF-8";
private static final long TEST_COUNT = 500;
public static void main(String[] args) throws Exception {
for (int i = 0; i < 100; i++) {
System.out.println("---------- test start ----------" + new Integer(i));
testSerialize();
testBase64();
}
}
private static void testBase64() throws Exception {
TreeBean tree = new TreeBean();
String bytes;
long startTime = System.currentTimeMillis();
for (int i = 0; i < TEST_COUNT; i++) {
bytes = getStringFromObject(tree);
getObjectFromString(bytes);
}
long endTime = System.currentTimeMillis();
System.out.println("testBase64 : " + (endTime - startTime));
}
private static void testSerialize() throws Exception {
TreeBean tree = new TreeBean();
byte[] bytes;
long startTime = System.currentTimeMillis();
for (int i = 0; i < TEST_COUNT; i++) {
bytes = getByteArrayFromObject(tree);
getObjectFromByteArray(bytes);
}
long endTime = System.currentTimeMillis();
System.out.println("testSerialize : " + (endTime - startTime));
}
private static Object getObjectFromString(String objectString) throws Exception {
if (objectString == null || objectString.trim().length() == 0) {
return null;
}
Base64 base64Decoder = new Base64();
return getObjectFromByteArray(base64Decoder.decode(objectString.getBytes(ENCODE_CHART_SET)));
}
private static String getStringFromObject(Object dataObject) throws Exception {
Base64 base64Decoder = new Base64();
byte[] bytes = base64Decoder.encode(getByteArrayFromObject(dataObject));
return new String(bytes, ENCODE_CHART_SET);
}
private static byte[] getByteArrayFromObject(Object dataObject) throws Exception {
if (dataObject == null) {
return null;
}
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
ObjectOutputStream p = new ObjectOutputStream(ostream);
p.writeObject(dataObject);
p.flush();
byte[] data = ostream.toByteArray();
p.close();
ostream.close();
return data;
}
private static Object getObjectFromByteArray(byte[] databyte) throws Exception {
if (databyte == null) {
return null;
}
ByteArrayInputStream intream = new ByteArrayInputStream(databyte);
ObjectInputStream p = new ObjectInputStream(intream);
return p.readObject();
}
}