zoukankan      html  css  js  c++  java
  • Java网络编程-对象编解码方案、优劣对照

    书籍推荐:

      实例代码 : http://download.csdn.net/detail/jiangtao_st/7677503

    1.  用户对象

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

    2.  对例如案

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


    3. 执行结果

      byte array 序列化大小:54

      jdk序列化对象大小:267


  • 相关阅读:
    MVC的布局页,视图布局页和分布页的使用
    C#程序的编译过程
    页面跳转到Area区域连接
    c#静态变量和非静态变量的区别
    C#设计模式:适配器模式(Adapter Pattern)
    依赖注入
    打印随机数到字符串中
    printf/scanf格式
    用fread和fwrite实现文件复制操作
    用fseek和ftell获取文件的大小
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5058259.html
Copyright © 2011-2022 走看看