package com.alibaba.json.test.performance;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import junit.framework.TestCase;
import com.alibaba.json.test.codec.Codec;
import com.alibaba.json.test.codec.FastjsonCodec;
import com.alibaba.json.test.codec.JacksonCodec;
import com.alibaba.json.test.entity.Company;
import com.alibaba.json.test.entity.Department;
import com.alibaba.json.test.entity.Employee;
import com.alibaba.json.test.entity.Group;
public class ObjectEncodePerformanceTest extends TestCase {
private final int COUNT = 1000 * 100;
private AtomicLong idSeed = new AtomicLong();
private Object object;
protected void setUp() throws Exception {
this.object = createObject();
}
public void test_decodeObject() throws Exception {
List<Codec> decoders = new ArrayList<Codec>();
decoders.add(new JacksonCodec());
decoders.add(new FastjsonCodec());
// decoders.add(new SimpleJsonDecoderImpl());
// decoders.add(new JsonLibDecoderImpl());
for (Codec decoder : decoders) {
for (int i = 0; i < 10; ++i) {
encode(object, decoder);
}
System.out.println();
}
}
public void encode(Object object, Codec decoder) throws Exception {
long startNano = System.nanoTime();
for (int i = 0; i < COUNT; ++i) {
decoder.encode(object);
}
long nano = System.nanoTime() - startNano;
System.out.println(decoder.getName() + " : \t" + NumberFormat.getInstance().format(nano));
}
private Object createObject() {
Group group = new Group();
group.setName("Alibaba Group");
group.setDescription("Alibaba Group makes it easy for anyone to buy or sell online anywhere in the world. ");
{
Company company = new Company();
company.setId(createId());
company.setName("Alibaba.com");
company.setDescription("Global leader in e-commerce for small businesses");
company.setStock("1688.HK");
group.getCompanies().add(company);
Department root = new Department();
root.setId(createId());
root.setName("B2B");
company.setRootDepartment(root);
{
Department cbu = new Department();
cbu.setId(createId());
cbu.setName("CBU");
root.getChildren().add(cbu);
Employee emp0 = new Employee();
emp0.setName("校长");
emp0.setDescription("神棍敌人姐");
emp0.setAge(3);
emp0.setSalary(new BigDecimal("123456789.0123"));
emp0.setBirthdate(new Date());
emp0.setBadboy(true);
cbu.getMembers().add(emp0);
}
{
Department icbu = new Department();
icbu.setId(createId());
icbu.setName("ICBU");
root.getChildren().add(icbu);
}
}
{
Company company = new Company();
company.setId(createId());
company.setName("Taobao");
company.setDescription("China's largest online retail website and one-stop platform for shopping, socializing and information sharing");
group.getCompanies().add(company);
}
{
Company company = new Company();
company.setId(createId());
company.setName("Alipay");
company.setDescription("China's leading third-party online payment platform");
group.getCompanies().add(company);
}
{
Company company = new Company();
company.setId(createId());
company.setName("Alibaba Cloud Computing");
company.setDescription("Developer of advanced data-centric cloud computing services");
group.getCompanies().add(company);
}
{
Company company = new Company();
company.setId(createId());
company.setName("China Yahoo");
company.setDescription("One of China's leading Internet portals");
group.getCompanies().add(company);
}
return group;
}
private Long createId() {
return idSeed.incrementAndGet();
}
}