Java网络编程-对象编解码方案、优劣对比
来源:互联网 发布:剑三藏剑二少捏脸数据 编辑:程序博客网 时间:2024/05/21 22:59
- 用户对象
- /**
- *
- * <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();
- }
- }
- }
- 运行结果
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
0 0
- Java网络编程-对象编解码方案、优劣对比
- Java网络编程-对象编解码方案、优劣对比
- java网络编程之Netty编解码技术(六)
- java编程中的编解码详解
- Netty实战-对象编解码,Netty对象网络传递
- TLV编解码【编程】
- 网络编程复习(九):Netty的编解码技术
- Python网络编程 1.1 协议栈、编解码、IP
- [疯狂Java]网络:URL编解码(URLDecoder、URLEncoder)
- Java:Base64编解码
- Java中的编解码
- Java的编解码
- Java Base64编解码
- java web 编解码
- java编解码技术
- java编解码base64
- Java NIO框架Netty教程(九)-Object对象编/解码
- Java NIO框架Netty教程(九) Object对象编/解码
- 海外优秀资讯抢先看5:私有应用云平台Sandstorm服务对象之个人用户
- 正则表达式 —— 插入符(anchor, ^)和美元符($)
- 自定义四个方向上的SlidingDrawer(抽屉效果)
- QQ空间触屏登录加密JS
- 前端优化总结
- Java网络编程-对象编解码方案、优劣对比
- Android逆向工程-破解 哈皮妹-萝莉
- 感谢CSDN管理员
- Java Timer 定时器的使用
- VS编程一些东东
- 谁是盗窃犯
- ELF文件的动态链接器 原理 设计和代码
- JDK JRE JVM 区别与联系
- ftp与telnet命令