/** * Copyright 2008 biaoping.yin * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.frameworkset.soa.xblink; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.StreamCorruptedException; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeSet; import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; import org.frameworkset.soa.ObjectSerializable; import org.frameworkset.soa.TransientFieldBean; import org.frameworkset.spi.BaseApplicationContext; import org.frameworkset.spi.DefaultApplicationContext; import org.frameworkset.spi.cglib.CGLibProxy; import org.frameworkset.spi.cglib.CGLibUtil; import org.junit.Test; import com.caucho.hessian.io.HessianInput; import com.caucho.hessian.io.HessianOutput; import com.frameworkset.util.FileUtil; import com.thoughtworks.xstream.XStream; /** * <p>TestSerializable.java</p> * <p> Description: </p> * <p> bboss workgroup </p> * <p> Copyright (c) 2009 </p> * * @Date 2011-10-10 * @author biaoping.yin * @version 1.0 */ public class TestSerializable { private static Logger log = Logger.getLogger(TestSerializable.class); private static XStream xStream = new XStream(); @Test public void testCGlibSerial() throws Exception { //远程调用 SerialPO po = new SerialPO(); po.setJob("架构工程师"); po.setName("多多"); Properties propes = new Properties(); propes.put("sss", "ssdfv"); propes.put("sssdd", "ssdfv"); po.setPropes(propes); CGLibProxy proxy = new CGLibProxy(po); SerialPO po1 = CGLibUtil.getBeanInstance(po.getClass(), po .getClass(), proxy); String xml = ObjectSerializable.toXML(po1); System.out.println(xml); po = ObjectSerializable.toBean(xml, SerialPO.class); System.out.println("name:"+po.getName()); System.out.println("job:"+po.getJob()); System.out.println("properties:"+po.getPropes()); } public static class SerialPO { private String name; private Properties propes; private String job; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Properties getPropes() { return propes; } public void setPropes(Properties propes) { this.propes = propes; } } @Test public void testTransientBeantoxml() throws Exception { TransientFieldBean transientFieldBean = new TransientFieldBean("onlyField"); transientFieldBean.setExcludeField("exccc"); transientFieldBean.setStaticFiled("staticFiled"); transientFieldBean.setTransientField("transientField"); String xml = ObjectSerializable.toXML(transientFieldBean); TransientFieldBean transientFieldBean_new = ObjectSerializable.toBean(xml, TransientFieldBean.class); System.out.println(); } private void convertBeanToXStreamXml(int count,Person joe) { try { long start = System.currentTimeMillis(); for(int i = 0; i < count; i++) { xStream.toXML(joe); } long end = System.currentTimeMillis(); System.out.println("执行xtream beantoxml "+count+"次,耗时:"+(end - start)+"毫秒"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void convertBeanToXStreamXml(int count,Test1 joe) { try { long start = System.currentTimeMillis(); for(int i = 0; i < count; i++) { xStream.toXML(joe); } long end = System.currentTimeMillis(); System.out.println("执行xtream beantoxml "+count+"次,耗时:"+(end - start)+"毫秒"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void convertXStreamXMLToBean(int count,String xml) { try { long start = System.currentTimeMillis(); for(int i = 0; i < count; i++) { xStream.fromXML(xml); } long end = System.currentTimeMillis(); System.out.println("执行xStream xmltobean "+count+"次,耗时:"+(end - start)+"毫秒"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void convertBeanToXml(int count,Person joe) { try { long start = System.currentTimeMillis(); for(int i = 0; i < count; i++) { ObjectSerializable.toXML(joe); } long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml "+count+"次,耗时:"+(end - start)+"毫秒"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void convertBeanToXml(int count,Test1 joe) { try { long start = System.currentTimeMillis(); for(int i = 0; i < count; i++) { ObjectSerializable.toXML(joe); } long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml "+count+"次,耗时:"+(end - start)+"毫秒"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testJAVASerializable() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); byte[] cs = oldObjectToByteBuffer(test1) ; System.out.println("java:"+cs.length); Test1 test1_ = (Test1)oldObjectFromByteBuffer(cs, 0, cs.length); System.out.println(); } /** * * @throws Exception */ @Test public void testJsonSerializable() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); ObjectMapper objectMapper = new ObjectMapper(); StringWriter wt = new StringWriter(); objectMapper.writeValue(wt, test1); String ss = wt.toString(); System.out.println("json:"+ss.getBytes().length); Test1 test1_ = objectMapper.readValue(new StringReader(ss), Test1.class); System.out.println(); } @Test public void testXSTreamSerializable() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); // byte[] cs = oldObjectToByteBuffer(test1) ; String ss = xStream.toXML(test1); System.out.println("xstream:"+ss.getBytes().length); Test1 test1_ = (Test1)xStream.fromXML(ss); System.out.println(); } @Test public void testBBossSerializable() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); String ss = ObjectSerializable.toXML(test1); System.out.println("bboss:"+ss.getBytes().length +"\r\n"+ss); Test1 test1_ = (Test1)ObjectSerializable.toBean(ss,Test1.class); String xmlXstream = xStream.toXML(test1); System.out.println(xmlXstream); } @Test public void testBBossSerializableException() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); Exception e = new Exception("asdfasdf"); test3.setE(e); String ss = ObjectSerializable.toXML(test1); long starttime = System.currentTimeMillis(); ss = ObjectSerializable.toXML(test1); long endtime = System.currentTimeMillis(); System.out.println("bboss:"+ss.getBytes().length +"\r\n"+ss); System.out.println("bboss time:"+(endtime -starttime)); Test1 test1_ = (Test1)ObjectSerializable.toBean(ss,Test1.class); String xmlXstream = xStream.toXML(test1); // starttime = System.currentTimeMillis(); // xmlXstream = xStream.toXML(test1); // endtime = System.currentTimeMillis(); //// System.out.println(xmlXstream); // test1 = (Test1) xStream.fromXML(xmlXstream); // System.out.println("xStream time:"+(endtime -starttime)); } @Test public void testFullBBossSerializable() throws Exception { BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/soa/xblink/test.xml"); Test1 test1 = context.getTBeanObject("test1", Test1.class); // byte[] cs = oldObjectToByteBuffer(test1) ; String ss = ObjectSerializable.toXML(test1); Test1 test1_ = (Test1)ObjectSerializable.toBean(ss,Test1.class); System.out.println(); } @Test public void testFullBBossSerializable1() throws Exception { //加载配置文件,构建一个组件容器对象 BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/soa/xblink/testcontainref.xml"); //获取组件test1 Test1 test1 = context.getTBeanObject("test1", Test1.class); //重新将组件序列化为xml串 String ss = ObjectSerializable.toXML(test1); //将xml串ss转换为对象test_ Test1 test1_ = (Test1)ObjectSerializable.toBean(ss,Test1.class); System.out.println(); } /** * Serializes/Streams an object into a byte buffer. * The object has to implement interface Serializable or Externalizable * or Streamable. Only Streamable objects are interoperable w/ jgroups-me */ public static byte[] oldObjectToByteBuffer(Object obj) throws Exception { byte[] result=null; ObjectOutputStream out= null; ByteArrayOutputStream out_stream = null; try { out_stream=new ByteArrayOutputStream(); out=new ObjectOutputStream(out_stream); out.writeObject(obj); result=out_stream.toByteArray(); return result; } catch(Exception e) { throw e; } finally { try { if (out_stream != null) out_stream.close(); } catch (Exception e2) { // TODO: handle exception } try { if (out != null) out.close(); } catch (Exception e2) { // TODO: handle exception } } } public static Object oldObjectFromByteBuffer(byte[] buffer, int offset, int length) throws Exception { if(buffer == null) return null; Object retval=null; try { // to read the object as an Externalizable ByteArrayInputStream in_stream=new ByteArrayInputStream(buffer, offset, length); ObjectInputStream in=new ObjectInputStream(in_stream); // changed Nov 29 2004 (bela) retval=in.readObject(); in.close(); } catch(StreamCorruptedException sce) { // try { // is it Streamable? // ByteArrayInputStream in_stream=new ByteArrayInputStream(buffer, offset, length); // DataInputStream in=new DataInputStream(in_stream); // retval=readGenericStreamable(in); // in.close(); // } // catch(Exception ee) { IOException tmp=new IOException("unmarshalling failed"); tmp.initCause(sce); throw tmp; // } } if(retval == null) return null; return retval; } private void convertXMLToBean(int count,String xml) { try { long start = System.currentTimeMillis(); for(int i = 0; i < count; i++) { ObjectSerializable.toBean( xml, Person.class); } long end = System.currentTimeMillis(); System.out.println("执行bboss xmltobean "+count+"次,耗时:"+(end - start)+"毫秒"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * */ @Test public void test() { PhoneNumber phone = new PhoneNumber(); phone.setCode(123); phone.setNumber("1234-456"); PhoneNumber fax = new PhoneNumber(); fax.setCode(123); fax.setNumber("<aaaa>9999-999</bbbb>"); Set dataSet = new TreeSet(); dataSet.add("aa"); dataSet.add("bb"); List dataList = new ArrayList(); dataList.add("中国人阿斯顿发水电费"); dataList.add("bb"); Map dataMap = new HashMap(); dataMap.put("aa","aavalue"); dataMap.put("bb","bbvalue"); String[] dataArray = new String[]{"aa","bb"}; String[][] datadoubleArray = new String[][]{{"aaa","bbb"},{"cccc","dddd"}}; Person joe = new Person(); joe.setFirstname("Joe"); joe.setDataDoubleArray(datadoubleArray); // joe.setLastname("Walnes"); //用来验证bboss和Xstream是否会按照null值传递,也就是说lastname有默认值"ssss" //这样我们手动把lastname设置为null,理论上来说反序列化后joe中的lastname应该是null而不是默认值"ssss" joe.setBirthdate(new Date()); Date[] updates = new Date[]{new Date(),new Date()}; joe.setUpdatedate(updates); joe.setLastname(null); joe.setPhone(phone); joe.setFax(fax); joe.setDataArray(dataArray); joe.setDataList(dataList); joe.setDataMap(dataMap); joe.setDataSet(dataSet); EnumData sex = EnumData.M; joe.setSex(sex); try { //预热bboss和xstream String xml = ObjectSerializable.toXML(joe); System.out.println(xml); System.out.println("bboss:"+xml.getBytes().length); Person person = ObjectSerializable.toBean(xml, Person.class); String xmlXstream = xStream.toXML(joe); System.out.println("xmlXstream:"+xmlXstream.getBytes().length); Person p = (Person)xStream.fromXML(xmlXstream); System.out.println(xmlXstream); System.out.println();System.out.println("bboss序列化测试用例开始");System.out.println(); long start = System.currentTimeMillis(); ObjectSerializable.toXML(joe); long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXml(10,joe); convertBeanToXml(100,joe); convertBeanToXml(1000,joe); convertBeanToXml(10000,joe); System.out.println();System.out.println("xstream序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.toXML(joe); end = System.currentTimeMillis(); System.out.println("执行XStream beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXStreamXml(10,joe); convertBeanToXStreamXml(100,joe); convertBeanToXStreamXml(1000,joe); convertBeanToXStreamXml(10000,joe); System.out.println();System.out.println("bboss反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); person = ObjectSerializable.toBean(xml, Person.class); end = System.currentTimeMillis(); System.out.println("执行bboss xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXMLToBean(10,xml); convertXMLToBean(100,xml); convertXMLToBean(1000,xml); convertXMLToBean(10000,xml); System.out.println();System.out.println("xstream反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.fromXML(xmlXstream); end = System.currentTimeMillis(); System.out.println("执行XStream xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXStreamXMLToBean(10,xmlXstream); convertXStreamXMLToBean(100,xmlXstream); convertXStreamXMLToBean(1000,xmlXstream); convertXStreamXMLToBean(10000,xmlXstream); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testLength() { PhoneNumber phone = new PhoneNumber(); phone.setCode(123); phone.setNumber("1234-456"); PhoneNumber fax = new PhoneNumber(); fax.setCode(123); fax.setNumber("<aaaa>9999-999</bbbb>"); Set dataSet = new TreeSet(); dataSet.add("aa"); dataSet.add("bb"); List dataList = new ArrayList(); dataList.add("aa"); dataList.add("bb"); Map dataMap = new HashMap(); dataMap.put("aa","aavalue"); dataMap.put("bb","bbvalue"); String[] dataArray = new String[]{"aa","bb"}; String[][] datadoubleArray = new String[][]{{"aaa","bbb"},{"cccc","dddd"}}; Person joe = new Person(); joe.setFirstname("Joe"); joe.setDataDoubleArray(datadoubleArray); // joe.setLastname("Walnes"); //用来验证bboss和Xstream是否会按照null值传递,也就是说lastname有默认值"ssss" //这样我们手动把lastname设置为null,理论上来说反序列化后joe中的lastname应该是null而不是默认值"ssss" joe.setBirthdate(new Date()); Date[] updates = new Date[]{new Date(),new Date()}; joe.setUpdatedate(updates); joe.setLastname(null); joe.setPhone(phone); joe.setFax(fax); joe.setDataArray(dataArray); joe.setDataList(dataList); joe.setDataMap(dataMap); joe.setDataSet(dataSet); EnumData sex = EnumData.M; joe.setSex(sex); try { //预热bboss和xstream String xml = ObjectSerializable.toXML(joe); System.out.println(xml); System.out.println("bboss:"+xml.getBytes().length); Person person = ObjectSerializable.toBean(xml, Person.class); String xmlXstream = xStream.toXML(joe); System.out.println("xmlXstream:"+xmlXstream.getBytes().length); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testTest1() { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); try { //预热bboss和xstream String xml = ObjectSerializable.toXML(test1); Test1 test1_ = (Test1)ObjectSerializable.toBean(xml,Test1.class); String xmlXstream = xStream.toXML(test1); Test1 p = (Test1)xStream.fromXML(xmlXstream); System.out.println(xmlXstream); System.out.println();System.out.println("bboss序列化测试用例开始");System.out.println(); long start = System.currentTimeMillis(); ObjectSerializable.toXML(test1); long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXml(10,test1); convertBeanToXml(100,test1); convertBeanToXml(1000,test1); convertBeanToXml(10000,test1); System.out.println();System.out.println("xstream序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.toXML(test1); end = System.currentTimeMillis(); System.out.println("执行XStream beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXStreamXml(10,test1); convertBeanToXStreamXml(100,test1); convertBeanToXStreamXml(1000,test1); convertBeanToXStreamXml(10000,test1); System.out.println();System.out.println("bboss反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); test1 = ObjectSerializable.toBean(xml, Test1.class); end = System.currentTimeMillis(); System.out.println("执行bboss xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXMLToBean(10,xml); convertXMLToBean(100,xml); convertXMLToBean(1000,xml); convertXMLToBean(10000,xml); System.out.println();System.out.println("xstream反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.fromXML(xmlXstream); end = System.currentTimeMillis(); System.out.println("执行XStream xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXStreamXMLToBean(10,xmlXstream); convertXStreamXMLToBean(100,xmlXstream); convertXStreamXMLToBean(1000,xmlXstream); convertXStreamXMLToBean(10000,xmlXstream); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testXMLTest1() { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); try { String bigcontent = FileUtil.getFileContent(new File("F:\\workspace\\bbossgroups-3.5\\bboss-core\\test\\org\\frameworkset\\soa\\testxstream.xml"), "UTF-8"); //预热bboss和xstream test1.setXmlvalue(bigcontent); String xml = ObjectSerializable.toXML(test1); Test1 test1_ = (Test1)ObjectSerializable.toBean(xml,Test1.class); String xmlXstream = xStream.toXML(test1); Test1 p = (Test1)xStream.fromXML(xmlXstream); System.out.println(xmlXstream); System.out.println();System.out.println("bboss序列化测试用例开始");System.out.println(); long start = System.currentTimeMillis(); ObjectSerializable.toXML(test1); long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXml(10,test1); convertBeanToXml(100,test1); convertBeanToXml(1000,test1); convertBeanToXml(10000,test1); System.out.println();System.out.println("xstream序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.toXML(test1); end = System.currentTimeMillis(); System.out.println("执行XStream beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXStreamXml(10,test1); convertBeanToXStreamXml(100,test1); convertBeanToXStreamXml(1000,test1); convertBeanToXStreamXml(10000,test1); System.out.println();System.out.println("bboss反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); test1 = ObjectSerializable.toBean(xml, Test1.class); end = System.currentTimeMillis(); System.out.println("执行bboss xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXMLToBean(10,xml); convertXMLToBean(100,xml); convertXMLToBean(1000,xml); convertXMLToBean(10000,xml); System.out.println();System.out.println("xstream反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.fromXML(xmlXstream); end = System.currentTimeMillis(); System.out.println("执行XStream xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXStreamXMLToBean(10,xmlXstream); convertXStreamXMLToBean(100,xmlXstream); convertXStreamXMLToBean(1000,xmlXstream); convertXStreamXMLToBean(10000,xmlXstream); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testXMLTest1Len() { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); try { String bigcontent = FileUtil.getFileContent(new File("F:\\workspace\\bbossgroups-3.5\\bboss-core\\test\\org\\frameworkset\\soa\\testxstream.xml"), "UTF-8"); //预热bboss和xstream test1.setXmlvalue(bigcontent); String xml = ObjectSerializable.toXML(test1); System.out.println("bboss:"+xml.getBytes().length); Test1 test1_ = (Test1)ObjectSerializable.toBean(xml,Test1.class); String xmlXstream = xStream.toXML(test1); Test1 p = (Test1)xStream.fromXML(xmlXstream); System.out.println("xmlXstream:"+xmlXstream.getBytes().length); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testDupJAVASerializable() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); try { String bigcontent = FileUtil.getFileContent(new File("F:\\workspace\\bbossgroups-3.5\\bboss-core\\test\\org\\frameworkset\\soa\\testxstream.xml"), "UTF-8"); //预热bboss和xstream test1.setXmlvalue(bigcontent); String xml = ObjectSerializable.toXML(test1); System.out.println("bboss:"+xml.getBytes().length); Test1 test1_ = (Test1)ObjectSerializable.toBean(xml,Test1.class); byte[] cs = oldObjectToByteBuffer(test1) ; System.out.println("java:"+cs.length); long s = System.currentTimeMillis(); test1_ = (Test1)oldObjectFromByteBuffer(cs, 0, cs.length); long e = System.currentTimeMillis(); System.out.println("java de times:" + (e - s)); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testHessianSerializable() throws Exception { Test1 test1 = new Test1(); Test2 test2 = new Test2(); Test3 test3 = new Test3(); test2.setTest1(test1); test1.setTest2(test2); test1.setTest3(test3); test3.setTest2(test2); try { String bigcontent = FileUtil.getFileContent(new File("F:\\workspace\\bbossgroups-3.5\\bboss-core\\test\\org\\frameworkset\\soa\\testxstream.xml"), "UTF-8"); //预热bboss和xstream test1.setXmlvalue(bigcontent); long s = System.currentTimeMillis(); String xml = ObjectSerializable.toXML(test1); long e = System.currentTimeMillis(); System.out.println("bboss:"+xml.getBytes().length + ",times:" + (e - s)); s = System.currentTimeMillis(); Test1 test1_ = (Test1)ObjectSerializable.toBean(xml,Test1.class); e = System.currentTimeMillis(); System.out.println("bboss de times:" + (e - s)); s = System.currentTimeMillis(); ByteArrayOutputStream os = new ByteArrayOutputStream(); HessianOutput ho = new HessianOutput(os); ho.writeObject(test1); byte[] cs = os.toByteArray(); e = System.currentTimeMillis(); System.out.println("hessian:"+cs.length+ ",times:" + (e - s)); s = System.currentTimeMillis(); ByteArrayInputStream is = new ByteArrayInputStream(cs); HessianInput hi = new HessianInput(is); test1_ = (Test1) hi.readObject(); e = System.currentTimeMillis(); System.out.println("hessian de times:" + (e - s)); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void test1() { PhoneNumber phone = new PhoneNumber(); phone.setCode(123); phone.setNumber("1234-456"); PhoneNumber fax = new PhoneNumber(); fax.setCode(123); fax.setNumber("<aaaa>9999-999中文乱码</bbbb>"); Set dataSet = new TreeSet(); dataSet.add("aa"); dataSet.add("bb"); List dataList = new ArrayList(); dataList.add("aa"); dataList.add("bb"); dataList.add(1); Map dataMap = new HashMap(); dataMap.put("aa","aavalue"); dataMap.put("bb","bbvalue"); String[] dataArray = new String[]{"aa","bb"}; String[][] datadoubleArray = new String[][]{{"aaa","bbb"},{"cccc","dddd"}}; Person joe = new Person(); joe.setFirstname("Joe"); joe.setDataDoubleArray(datadoubleArray); // joe.setLastname("Walnes"); //用来验证bboss和Xstream是否会按照null值传递,也就是说lastname有默认值"ssss" //这样我们手动把lastname设置为null,理论上来说反序列化后joe中的lastname应该是null而不是默认值"ssss" joe.setBirthdate(new Date()); Date[] updates = new Date[]{new Date(),new Date()}; joe.setUpdatedate(updates); joe.setLastname(null); joe.setPhone(phone); joe.setFax(fax); joe.setDataArray(dataArray); joe.setDataList(dataList); joe.setDataMap(dataMap); joe.setDataSet(dataSet); EnumData sex = EnumData.M; joe.setSex(sex); try { //预热bboss和xstream String xml = ObjectSerializable.toXML(joe); System.out.println(xml); Person person = ObjectSerializable.toBean(xml, Person.class); System.out.println(); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @throws IOException * */ @Test public void testBigData() throws IOException { //这个文件中内容有47565 字节,约47k的数据 String bigcontent = FileUtil.getFileContent(new File("F:\\workspace\\bbossgroups-3.5\\bboss-core\\test\\org\\frameworkset\\soa\\testxstream.xml"), "UTF-8"); PhoneNumber phone = new PhoneNumber(); phone.setCode(123); phone.setNumber("1234-456"); PhoneNumber fax = new PhoneNumber(); fax.setCode(123); fax.setNumber(bigcontent); Set dataSet = new TreeSet(); dataSet.add("aa"); dataSet.add("bb"); List dataList = new ArrayList(); dataList.add("aa"); dataList.add("bb"); Map dataMap = new HashMap(); dataMap.put("aa","aavalue"); dataMap.put("bb","bbvalue"); String[] dataArray = new String[]{"aa","bb"}; Person joe = new Person(); joe.setFirstname("Joe"); // joe.setLastname("Walnes"); //用来验证bboss和Xstream是否会按照null值传递,也就是说lastname有默认值"ssss" //这样我们手动把lastname设置为null,理论上来说反序列化后joe中的lastname应该是null而不是默认值"ssss" joe.setLastname(null); joe.setPhone(phone); joe.setFax(fax); joe.setDataArray(dataArray); joe.setDataList(dataList); joe.setDataMap(dataMap); joe.setDataSet(dataSet); try { //预热bboss和xstream String xml = ObjectSerializable.toXML(joe); System.out.println(xml); Person person = ObjectSerializable.toBean(xml, Person.class); String xmlXstream = xStream.toXML(joe); Person p = (Person)xStream.fromXML(xmlXstream); System.out.println(xmlXstream); System.out.println();System.out.println("bboss序列化测试用例开始");System.out.println(); long start = System.currentTimeMillis(); ObjectSerializable.toXML(joe); long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXml(10,joe); convertBeanToXml(100,joe); convertBeanToXml(1000,joe); convertBeanToXml(10000,joe); System.out.println();System.out.println("xstream序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.toXML(joe); end = System.currentTimeMillis(); System.out.println("执行XStream beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXStreamXml(10,joe); convertBeanToXStreamXml(100,joe); convertBeanToXStreamXml(1000,joe); convertBeanToXStreamXml(10000,joe); System.out.println();System.out.println("bboss反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); person = ObjectSerializable.toBean( xml, Person.class); end = System.currentTimeMillis(); System.out.println("执行bboss xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXMLToBean(10,xml); convertXMLToBean(100,xml); convertXMLToBean(1000,xml); convertXMLToBean(10000,xml); System.out.println();System.out.println("xstream反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.fromXML(xmlXstream); end = System.currentTimeMillis(); System.out.println("执行XStream xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXStreamXMLToBean(10,xmlXstream); convertXStreamXMLToBean(100,xmlXstream); convertXStreamXMLToBean(1000,xmlXstream); convertXStreamXMLToBean(10000,xmlXstream); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @throws IOException * */ @Test public void testFileData() throws IOException { //这个文件中内容有47565 字节,约47k的数据 File fileData = new File("F:\\workspace\\bbossgroups-3.5\\bboss-core\\test\\org\\frameworkset\\soa\\testxstream.xml"); PhoneNumber phone = new PhoneNumber(); phone.setCode(123); phone.setNumber("1234-456"); PhoneNumber fax = new PhoneNumber(); fax.setCode(123); fax.setNumber("<aaaa>9999-999</bbbb>"); Set dataSet = new TreeSet(); dataSet.add("aa"); dataSet.add("bb"); List dataList = new ArrayList(); dataList.add("aa"); dataList.add("bb"); Map dataMap = new HashMap(); dataMap.put("aa","aavalue"); dataMap.put("bb","bbvalue"); String[] dataArray = new String[]{"aa","bb"}; FilePerson joe = new FilePerson(); joe.setFileData(fileData); joe.setFirstname("Joe"); // joe.setLastname("Walnes"); //用来验证bboss和Xstream是否会按照null值传递,也就是说lastname有默认值"ssss" //这样我们手动把lastname设置为null,理论上来说反序列化后joe中的lastname应该是null而不是默认值"ssss" joe.setLastname(null); joe.setPhone(phone); joe.setFax(fax); joe.setDataArray(dataArray); joe.setDataList(dataList); joe.setDataMap(dataMap); joe.setDataSet(dataSet); try { //预热bboss和xstream String xml = ObjectSerializable.toXML(joe); System.out.println(xml); Person person = ObjectSerializable.toBean( xml, Person.class); String xmlXstream = xStream.toXML(joe); Person p = (Person)xStream.fromXML(xmlXstream); System.out.println(xmlXstream); System.out.println();System.out.println("bboss序列化测试用例开始");System.out.println(); long start = System.currentTimeMillis(); ObjectSerializable.toXML(joe); long end = System.currentTimeMillis(); System.out.println("执行bboss beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXml(10,joe); convertBeanToXml(100,joe); convertBeanToXml(1000,joe); convertBeanToXml(10000,joe); System.out.println();System.out.println("xstream序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.toXML(joe); end = System.currentTimeMillis(); System.out.println("执行XStream beantoxml 1次,耗时:"+(end - start) +"毫秒"); convertBeanToXStreamXml(10,joe); convertBeanToXStreamXml(100,joe); convertBeanToXStreamXml(1000,joe); convertBeanToXStreamXml(10000,joe); System.out.println();System.out.println("bboss反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); person = ObjectSerializable.toBean( xml, Person.class); end = System.currentTimeMillis(); System.out.println("执行bboss xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXMLToBean(10,xml); convertXMLToBean(100,xml); convertXMLToBean(1000,xml); convertXMLToBean(10000,xml); System.out.println();System.out.println("xstream反序列化测试用例开始");System.out.println(); start = System.currentTimeMillis(); xStream.fromXML(xmlXstream); end = System.currentTimeMillis(); System.out.println("执行XStream xmltobean 1次,耗时:"+(end - start)+"豪秒"); convertXStreamXMLToBean(10,xmlXstream); convertXStreamXMLToBean(100,xmlXstream); convertXStreamXMLToBean(1000,xmlXstream); convertXStreamXMLToBean(10000,xmlXstream); //测试用例结束 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }