您的位置:首页 > 理论基础 > 计算机网络

Java网络编程-对象编解码方案、优劣对比

2014-07-25 14:52 204 查看
书籍推荐:
[b] 实例代码 : http://download.csdn.net/detail/jiangtao_st/7677503
[/b]




用户对象

/**
*
* <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;

/**
* email
*/
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();
}

}
}


运行结果


byte array 序列化大小:54
jdk序列化对象大小:267
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: