1.  用户对象

1. /**
2.  *
3.  * <p>
4.  *用户实体对象定义
5.  * </p>
6.  *
7.  * @author 卓轩
8.  * @创建时间:2014年6月20日
9.  * @产品: UIC
10.  * @version: V1.0
11.  */  
12. public class UserDO implements Serializable {  
13.   
14. private static final long serialVersionUID = 7289036533757178921L;  
15.   
16. /**
17.      * userid
18.     */  
19. private int userId;  
20.   
21. /**
22.      * email
23.     */  
24. private String email;  
25.   
26. /**
27.      * uname
28.     */  
29. private String uname;  
30.   
31. /**
32.      * unick
33.     */  
34. private String unick;  
35.   
36. /**
37.      * sex
38.     */  
39. private Integer sex;  
40.   
41. public int getUserId() {  
42. return userId;  
43.     }  
44.   
45. public void setUserId(int userId) {  
46. this.userId = userId;  
47.     }  
48.   
49. public String getEmail() {  
50. return email;  
51.     }  
52.   
53. public void setEmail(String email) {  
54. this.email = email;  
55.     }  
56.   
57. public String getUname() {  
58. return uname;  
59.     }  
60.   
61. public void setUname(String uname) {  
62. this.uname = uname;  
63.     }  
64.   
65. public String getUnick() {  
66. return unick;  
67.     }  
68.   
69. public void setUnick(String unick) {  
70. this.unick = unick;  
71.     }  
72.   
73. public Integer getSex() {  
74. return sex;  
75.     }  
76.   
77.   
78. public void setSex(Integer sex) {  
79. this.sex = sex;  
80.     }  
81.   
82. @Override  
83. public String toString() {  
84. return "UserDO ["+this.userId+"],["+this.uname+"],["+this.unick+"],["+this.email+"]";  
85.     }  
86.   
87. public byte [] coder(){  
88.   
89. 1024);  
90.           
91. byte [] email = this.email.getBytes();  
92.         buffer.putInt(email.length);  
93.         buffer.put(email);  
94.           
95. byte [] uname =this.uname.getBytes();  
96.         buffer.putInt(uname.length);  
97.         buffer.put(uname);  
98.           
99. byte [] unick = this.unick.getBytes();  
100.         buffer.putInt(unick.length);  
101.         buffer.put(unick);  
102.           
103. this.sex);  
104. this.userId);  
105.           
106.         buffer.flip();  
107. byte[] result = new byte[buffer.remaining()];  
108.         buffer.get(result);  
109. return result;  
110.     }  
111.   
112. }

  1.  对比方案





1. /**
2.  * 
3.  * <p>
4.  *  对比对象编解码 优劣
5.  * 
6.  *  代码通过从同一个对象,使用jdk序列化 和 二进制编解码 ,从执行时间,产生的字节大小作对比
7.  * </p>
8.  * 
9.  * @author 卓轩
10.  * @创建时间:2014年7月8日
11.  * @version: V1.0
12.  */  
13. public class ObjectCoderCompare {  
14.   
15. /**
16.      * 对比序列化文件大小
17.      */  
18. @Test  
19. public void sizeByteCompare(){  
20.           
21. try {  
22. new UserDO();  
23. 113445);  
24. 1);  
25. "卓轩");  
26. "zhuoxuan");  
27. "zhuoxuan@mogujie.com");  
28.               
29. "byte array 序列化大小:" + zhuoxuan.coder().length);  
30.               
31. //jdk 序列化对象  
32. new ByteArrayOutputStream();  
33. new ObjectOutputStream(bos);  
34.             objectOutputStream.writeObject(zhuoxuan);  
35.             objectOutputStream.flush();  
36.             objectOutputStream.close();  
37. byte[] byteArray = bos.toByteArray();  
38. "jdk序列化对象大小:" + byteArray.length);  
39. catch (IOException e) {  
40. // TODO Auto-generated catch block  
41.             e.printStackTrace();  
42.         }  
43.     }  
44.       
45. /**
46.      * 执行时间,性能对比
47.      */  
48. @Test  
49. public void performCompare(){  
50.           
51. try {  
52. new UserDO();  
53. 113445);  
54. 1);  
55. "卓轩");  
56. "zhuoxuan");  
57. "zhuoxuan@mogujie.com");  
58.               
59. long startTime = System.currentTimeMillis();  
60. int count = 1000000;  
61. for (int i = 0; i < count; i++) {  
62.                 zhuoxuan.coder();  
63.             }  
64. long endTime = System.currentTimeMillis();  
65. "byte array 执行时间:" + (endTime-startTime) + "ms");  
66.               
67.             startTime = System.currentTimeMillis();  
68. for (int i = 0; i < count; i++) {  
69. //jdk 序列化对象  
70. new ByteArrayOutputStream();  
71. new ObjectOutputStream(bos);  
72.                 objectOutputStream.writeObject(zhuoxuan);  
73.                 objectOutputStream.flush();  
74.                 objectOutputStream.close();  
75. byte[] byteArray = bos.toByteArray();  
76.             }  
77.             endTime = System.currentTimeMillis();  
78. "jdk 序列化对象 执行时间:" + (endTime-startTime) + "ms");  
79. catch (IOException e) {  
80. // TODO Auto-generated catch block  
81.             e.printStackTrace();  
82.         }  
83.           
84.     }  
85. }

  1. 运行结果
    byte array 执行时间:1468ms
    jdk 序列化对象 执行时间:11172ms
    byte array 序列化大小:54
    jdk序列化对象大小:248




    byte array 执行时间:1625ms
    jdk 序列化对象 执行时间:11922ms
    byte array 序列化大小:54
    jdk序列化对象大小:248


    byte array 序列化大小:54
    jdk序列化对象大小:248
    byte array 执行时间:1703ms
    jdk 序列化对象 执行时间:11937ms


    byte array 序列化大小:54
    jdk序列化对象大小:248
    byte array 执行时间:1562ms
    jdk 序列化对象 执行时间:12266ms