Java网络编程-对象编解码方案、优劣对照
实例代码 :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("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
Java网络编程-对象编解码方案、优劣对照的更多相关文章
- 这份书单会告诉你,Java网络编程其实很重要
- Java 网络编程---分布式文件协同编辑器设计与实现
目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...
- Java网络编程和NIO详解9:基于NIO的网络编程框架Netty
Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introd ...
- Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO
Java网络编程和NIO详解5:Java 非阻塞 IO 和异步 IO Java 非阻塞 IO 和异步 IO 转自https://www.javadoop.com/post/nio-and-aio 本系 ...
- Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
本文转载 https://www.javadoop.com 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.c ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- 20145212 实验五《Java网络编程》
20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...
- 20145213《Java程序设计》实验五Java网络编程及安全
20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...
随机推荐
- Robot Framework与Web界面自动化测试学习笔记:如何判断单选框的选中状态
单选按钮是个常见的html元素,在网页中往往提供一组单选按钮来做选项. 这样在自动化测试用例中需要判断当前选中的按钮是否与预期的一直. 可以这样来操作: ${value} Get Element ...
- spring利用扫描方式对bean的处理(对任何版本如何获取xml配置信息的处理)
利用扫描的方式将组件注入容器,就也可以不用操作bean来实例化对象了. 下面我做一个例子 我用的spring3.2.2版本的 首先写一个spring.xml. <?xml version=&qu ...
- IOS开发之UILabel动态高度设置方法
项目中有这样的需求,要显示一本书的概述,默认显示2行,点击展开按钮,显示全部,点击收回,有显示2行. 开始的时候按钮事件中,可能写的是这样一段代码: if (isExpand) { [lblBrief ...
- .cmd文件与.bat文件
.cmd文件与.bat文件的区别 包括ASSOC.FTYPE.APPEND.PATH.PROMPT.SET等6个命令在.bat和命令行环境下与.cmd环境下的执行表现不尽相同在.cmd环境下这些命令无 ...
- solr总结 第六部分:solr查询语法
1.基本查询语法 q:全文查询.schema.xml里面定义了如下两块.eg q=ibm即表示org_name或者org_weisite里面出现ibm的document都可以被匹配到.KeyWords ...
- Android 调整屏幕分辩率
Android 可设置为随着窗口大小调整缩放比例及设定fixed的窗口大小. 对于surface的控制在SurfaceHolder类中进行 而Android 屏幕分辩率中已经有一个类DisplayMe ...
- Delphi XE5 for Android(十一篇)
http://www.cnblogs.com/ChinaEHR/category/521326.html http://blog.csdn.net/laorenshen
- 将网站部署到服务器上出现_STORAGE_WRITE_ERROR_问题
用的thinkphp3.2的框架,在本地运行没有问题,部署到服务器上(基于centos的LAMP环境)即报错,报错信息如下(完全看不懂...):求大神帮帮忙~~~~(>_<)~~~~ :( ...
- 1.0.3-学习Opencv与MFC混合编程之---打开本地摄像头
源代码:http://download.csdn.net/detail/nuptboyzhb/3961643 版本1.0.3新增内容 打开摄像头 Ø 新建菜单项,Learning OpenCV——&g ...
- strip 命令的使用方法
用途 通过除去绑定程序和符号调试程序使用的信息,降低扩展公共对象文件格式(XCOFF)的对象文件的大小. 语法 strip [ -V ] [ -r [ -l ] | -x [ -l ] | -t | ...