package org.pinus4j.test.serializer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.zip.GZIPOutputStream; import org.codehaus.jackson.map.ObjectMapper; public class BaseTest { protected char[] words = new char[] { '第', '提', '去', '额', '我', '中', '速', '而', '的', '分', '平', '吗', '库', '你' }; protected Random r = new Random(); protected String genWord(int count) { int length = words.length; char[] text = new char[count]; for (int i = 0; i < count; i++) { text[i] = words[r.nextInt(length)]; } return new String(text); } ObjectMapper mapper = new ObjectMapper(); protected byte[] writeJson(Object o) throws Exception { return mapper.writeValueAsBytes(o); } protected <T> T readJson(byte[] b, Class<T> clazz) throws Exception { return (T) mapper.readValue(b, clazz); } protected byte[] writeObject(Object o) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(o); byte[] b = baos.toByteArray(); baos.close(); return b; } protected Object readObject(byte[] b) throws IOException, ClassNotFoundException { ByteArrayInputStream bais = new ByteArrayInputStream(b); ObjectInputStream ois = new ObjectInputStream(bais); Object obj = ois.readObject(); bais.close(); return obj; } protected byte[] gzip(byte[] b) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(baos); gzip.write(b, 0, b.length); gzip.finish(); byte[] gdata = baos.toByteArray(); baos.close(); return gdata; } protected void showLength(String desc, byte[] b) { System.out.println(desc + " serialize length: " + b.length); } protected void showLength(byte[] b) { System.out.println("serialize length: " + b.length); } protected Model createModel() { Model model = new Model(); model.setBool(true); model.setBools(new boolean[] { true, false, true }); model.setObool(new Boolean(false)); model.setObools(new Boolean[] { new Boolean(true), new Boolean(false) }); model.setCh('a'); model.setChs(new char[] { '哦', '啊', '们' }); model.setOch(new Character('a')); model.setOchs(new Character[] { new Character('a'), new Character('b') }); model.setB((byte) 1); model.setBs(new byte[] { (byte) 1, (byte) 2 }); model.setOb(new Byte((byte) 1)); model.setObs(new Byte[] { new Byte((byte) 1), new Byte((byte) 2) }); model.setSh((short) 1); model.setShs(new short[] { (short) 1, (short) 2 }); model.setOsh(new Short((short) 1)); model.setOshs(new Short[] { new Short((short) 1), new Short((short) 1) }); model.setI(1); model.setIs(new int[] { 1, 2, 3, 4 }); model.setOi(new Integer(1)); model.setOis(new Integer[] { new Integer(1), new Integer(2) }); model.setL(1l); model.setLs(new long[] { 1l, 2l }); model.setOl(new Long(1l)); model.setOls(new Long[] { new Long(1l), new Long(2l) }); model.setF(1.1f); model.setFs(new float[] { 1.1f, 1.2f }); model.setOf(new Float(1.2f)); model.setOfs(new Float[] { new Float(1.2f), new Float(1.2f) }); model.setD(1.1); model.setDs(new double[] { 1.1, 1.2 }); model.setOd(new Double(1.1)); model.setOds(new Double[] { new Double(1.1), new Double(1.1) }); model.setS(genWord(20)); model.setS1(genWord(25)); model.setS2(genWord(30)); model.setS3(genWord(40)); model.setS4(genWord(80)); model.setS5(genWord(160)); model.setDate(new Date()); model.setDates(new Date[] { new Date(), new Date(), new Date() }); model.setSqlDate(new java.sql.Date(System.currentTimeMillis())); model.setSqlDates(new java.sql.Date[] { new java.sql.Date(System.currentTimeMillis()), new java.sql.Date(System.currentTimeMillis()) }); model.setCal(Calendar.getInstance()); model.setCals(new Calendar[] { Calendar.getInstance(), Calendar.getInstance(), Calendar.getInstance(), Calendar.getInstance() }); model.setTime(new Timestamp(System.currentTimeMillis())); model.setTimes(new Timestamp[] { new Timestamp(System.currentTimeMillis()), new Timestamp(System.currentTimeMillis()) }); model.setEt(EnumTest.A); model.setEts(new EnumTest[] { EnumTest.A, null, EnumTest.B }); model.setSm(createInnerModel()); model.setSms(new InnerModel[] { createInnerModel(), null, createInnerModel(), null }); List<String> list1 = new ArrayList<String>(); List<?> nlist = null; List<Object> list2 = new LinkedList<Object>(); List<InnerModel> list3 = new CopyOnWriteArrayList<InnerModel>(); list1.add("aa"); list1.add("bb"); list2.add("hello world"); list2.add(1); list2.add(createInnerModel()); list2.add(createInnerModel()); list2.add(createInnerModel()); list3.add(createInnerModel()); model.setList1(list1); model.setNlist(nlist); model.setList2(list2); model.setList3(list3); Set<InnerModel> set1 = new HashSet<InnerModel>(); Set<InnerModel> set2 = new TreeSet<InnerModel>(); Set<InnerModel> set3 = new LinkedHashSet<InnerModel>(); set1.add(createInnerModel()); set1.add(createInnerModel()); set2.add(createInnerModel()); set2.add(createInnerModel()); set3.add(createInnerModel()); set3.add(createInnerModel()); model.setSet1(set1); model.setSet2(set2); model.setSet3(set3); Map<InnerModel, InnerModel> map = new HashMap<InnerModel, InnerModel>(); Map<String, Object> map1 = new TreeMap<String, Object>(); Map<Object, Object> map2 = new LinkedHashMap<Object, Object>(); Map<Object, Object> map3 = new ConcurrentHashMap<Object, Object>(); map.put(createInnerModel(), createInnerModel()); map1.put("test server", createInnerModel()); map2.put(createInnerModel(), createInnerModel()); map3.put(createInnerModel(), createInnerModel()); model.setMap(map); model.setMap1(map1); model.setMap2(map2); model.setMap3(map3); return model; } protected InnerModel createInnerModel() { InnerModel model = new InnerModel(); model.setBool(true); model.setBools(new boolean[] { true, false, true }); model.setObool(new Boolean(false)); model.setObools(new Boolean[] { new Boolean(true), new Boolean(false) }); model.setCh('a'); model.setChs(new char[] { '哦', '啊', '们' }); model.setOch(new Character('a')); model.setOchs(new Character[] { new Character('a'), new Character('b') }); model.setB((byte) 1); model.setBs(new byte[] { (byte) 1, (byte) 2 }); model.setOb(new Byte((byte) 1)); model.setObs(new Byte[] { new Byte((byte) 1), new Byte((byte) 2) }); model.setSh((short) 1); model.setShs(new short[] { (short) 1, (short) 2 }); model.setOsh(new Short((short) 1)); model.setOshs(new Short[] { new Short((short) 1), new Short((short) 1) }); model.setI(1); model.setIs(new int[] { 1, 2, 3, 4 }); model.setOi(new Integer(1)); model.setOis(new Integer[] { new Integer(1), new Integer(2) }); model.setL(1l); model.setLs(new long[] { 1l, 2l }); model.setOl(new Long(1l)); model.setOls(new Long[] { new Long(1l), new Long(2l) }); model.setF(1.1f); model.setFs(new float[] { 1.1f, 1.2f }); model.setOf(new Float(1.2f)); model.setOfs(new Float[] { new Float(1.2f), new Float(1.2f) }); model.setD(1.1); model.setDs(new double[] { 1.1, 1.2 }); model.setOd(new Double(1.1)); model.setOds(new Double[] { new Double(1.1), new Double(1.1) }); model.setS(genWord(20)); model.setS1(genWord(25)); model.setS2(genWord(30)); model.setS3(genWord(40)); model.setDate(new Date()); model.setDates(new Date[] { new Date(), new Date(), new Date() }); model.setSqlDate(new java.sql.Date(System.currentTimeMillis())); model.setSqlDates(new java.sql.Date[] { new java.sql.Date(System.currentTimeMillis()), new java.sql.Date(System.currentTimeMillis()) }); model.setCal(Calendar.getInstance()); model.setCals(new Calendar[] { Calendar.getInstance(), Calendar.getInstance(), Calendar.getInstance(), Calendar.getInstance() }); model.setTime(new Timestamp(System.currentTimeMillis())); model.setTimes(new Timestamp[] { new Timestamp(System.currentTimeMillis()), new Timestamp(System.currentTimeMillis()) }); model.setEt(EnumTest.A); model.setEts(new EnumTest[] { EnumTest.A, null, EnumTest.B }); return model; } }