书籍推荐:
实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503
- 用户对象
/** * * <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("[email protected]"); 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("[email protected]"); 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
Java网络编程-对象编解码方案、优劣对比
时间: 2024-11-07 09:52:42