- 用户对象
- /**
- *
- * <p>
- *用户实体对象定义
- * </p>
- *
- * @author 卓轩
- * @创建时间:2014年6月20日
- * @产品: UIC
- * @version: V1.0
- */
- public class UserDO implements Serializable {
- private static final long serialVersionUID = 7289036533757178921L;
- /**
- * userid
- */
- private int userId;
- /**
- */
- private String email;
- /**
- * uname
- */
- private String uname;
- /**
- * unick
- */
- private String unick;
- /**
- * sex
- */
- private Integer sex;
- public int getUserId() {
- return userId;
- }
- public void setUserId(int userId) {
- this.userId = userId;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public String getUname() {
- return uname;
- }
- public void setUname(String uname) {
- this.uname = uname;
- }
- public String getUnick() {
- return unick;
- }
- public void setUnick(String unick) {
- this.unick = unick;
- }
- public Integer getSex() {
- return sex;
- }
- public void setSex(Integer sex) {
- this.sex = sex;
- }
- @Override
- public String toString() {
- return "UserDO ["+this.userId+"],["+this.uname+"],["+this.unick+"],["+this.email+"]";
- }
- public byte [] coder(){
- ByteBuffer buffer = ByteBuffer.allocate(1024);
- byte [] email = this.email.getBytes();
- buffer.putInt(email.length);
- buffer.put(email);
- byte [] uname =this.uname.getBytes();
- buffer.putInt(uname.length);
- buffer.put(uname);
- byte [] unick = this.unick.getBytes();
- buffer.putInt(unick.length);
- buffer.put(unick);
- buffer.putInt(this.sex);
- buffer.putInt(this.userId);
- buffer.flip();
- byte[] result = new byte[buffer.remaining()];
- buffer.get(result);
- return result;
- }
- }
- 对比方案
- /**
- *
- * <p>
- * 对比对象编解码 优劣
- *
- * 代码通过从同一个对象,使用jdk序列化 和 二进制编解码 ,从执行时间,产生的字节大小作对比
- * </p>
- *
- * @author 卓轩
- * @创建时间:2014年7月8日
- * @version: V1.0
- */
- public class ObjectCoderCompare {
- /**
- * 对比序列化文件大小
- */
- @Test
- public void sizeByteCompare(){
- try {
- UserDO zhuoxuan = new UserDO();
- zhuoxuan.setUserId(113445);
- zhuoxuan.setSex(1);
- zhuoxuan.setUname("卓轩");
- zhuoxuan.setUnick("zhuoxuan");
- zhuoxuan.setEmail("zhuoxuan@mogujie.com");
- System.out.println("byte array 序列化大小:" + zhuoxuan.coder().length);
- //jdk 序列化对象
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(bos);
- objectOutputStream.writeObject(zhuoxuan);
- objectOutputStream.flush();
- objectOutputStream.close();
- byte[] byteArray = bos.toByteArray();
- System.out.println("jdk序列化对象大小:" + byteArray.length);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- /**
- * 执行时间,性能对比
- */
- @Test
- public void performCompare(){
- try {
- UserDO zhuoxuan = new UserDO();
- zhuoxuan.setUserId(113445);
- zhuoxuan.setSex(1);
- zhuoxuan.setUname("卓轩");
- zhuoxuan.setUnick("zhuoxuan");
- zhuoxuan.setEmail("zhuoxuan@mogujie.com");
- long startTime = System.currentTimeMillis();
- int count = 1000000;
- for (int i = 0; i < count; i++) {
- zhuoxuan.coder();
- }
- long endTime = System.currentTimeMillis();
- System.out.println("byte array 执行时间:" + (endTime-startTime) + "ms");
- startTime = System.currentTimeMillis();
- for (int i = 0; i < count; i++) {
- //jdk 序列化对象
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(bos);
- objectOutputStream.writeObject(zhuoxuan);
- objectOutputStream.flush();
- objectOutputStream.close();
- byte[] byteArray = bos.toByteArray();
- }
- endTime = System.currentTimeMillis();
- System.out.println("jdk 序列化对象 执行时间:" + (endTime-startTime) + "ms");
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- 运行结果
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
Java网络编程-对象编解码方案、优劣对比
最新推荐文章于 2025-03-24 00:08:58 发布