Java网络编程-对象编解码方案、优劣对比
2015-02-03 13:51
323 查看
用户对象
[java] view
plaincopyprint?
/**
*
* <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;
}
}
对比方案
[java] view
plaincopyprint?
/**
*
* <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 执行时间: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
[java] view
plaincopyprint?
/**
*
* <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;
}
}
对比方案
[java] view
plaincopyprint?
/**
*
* <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 执行时间: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
相关文章推荐
- Java网络编程-对象编解码方案、优劣对比
- Java网络编程-对象编解码方案、优劣对照
- Java网络编程_传输实体类对象
- Java面向对象 网络编程 上
- Java网络编程从入门到精通(2):创建InetAddress对象的四个静态方法
- JAVA高级视频 网络编程 07 TCP网络连上传递对象
- Java 网络编程之 (TCP传递对象)
- java网络编程: InetAddress类之创建新的InetAddress对象
- Java 网络编程 之 传输对象 Serialization 序列化
- Java面向对象 网络编程 下
- Java面向对象 网络编程 上
- 网络服务器并发编程的几种方案对比
- java中网络编程------UDP协议(实现步骤)DatagramSocket对象
- java网络编程传递对象——序列化
- Java面向对象 网络编程 下
- java 网络编程【8】 在TCP网络连接上传递对象
- Java网络编程由浅入深五 Java对象的序列化与反序列
- java网络编程之Netty编解码技术(六)
- 案例三:java网络编程(对象流传输)
- java的网络功能与编程