博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java编解码技术,netty nio
阅读量:6463 次
发布时间:2019-06-23

本文共 2118 字,大约阅读时间需要 7 分钟。

对于java提供的对象输入输出流ObjectInputStream与ObjectOutputStream,可以直接把java对象作为可存储的字节数组写入文件,也可以传输到网络上去。对与java开放人员来说,默认的jdk序列化机制可以避免操作底层的字节数组,从而提升开发效率。

1.为什么需要序列化

网络传输与对象序列化

 

2.java编解码技术指的什么

netty nio是基于网络传输,当进行远程跨进程服务调用时,需要把被传输的对象编码为字节数组或者bytebuffer对象。而当远程服务读取到bytebuffer对象或字节数组时,需要将其解码发送时候的java对象。这个就是java对象的编解码技术。

 

3.java原生态序列化的缺点

(1)无法跨语言,这个是最致命的问题。当跨进程服务调用,其余语言,如与c++交互时,java序列化难以胜任。java序列化用的是java内部私有协议

(2)序列化后码流太大

如:

1 package com.ming.netty.code; 2  3 import java.io.Serializable; 4 import java.nio.ByteBuffer; 5  6  7 /** 8  * 一个普通学生类 9  * @author mingge10  *11  */12 public class Student implements Serializable{13     private static final long serialVersionUID = 1L;14 15     private String stuName;16 17 18     public String getStuName() {19         return stuName;20     }21 22     public void setStuName(String stuName) {23         this.stuName = stuName;24     }25     26     public byte[] codeC(){27         ByteBuffer buffer=ByteBuffer.allocate(1024);28         byte[] value=this.getStuName().getBytes();29         buffer.putInt(value.length);30         buffer.put(value);31         buffer.flip();32         value=null;33         byte[] result=new byte[buffer.remaining()];34         buffer.get(result);35         return result;36     }37     38 }
1 package com.ming.netty.code; 2  3 import java.io.ByteArrayOutputStream; 4 import java.io.IOException; 5 import java.io.ObjectOutputStream; 6  7 public class TestStudent { 8  9     public static void main(String[] args) throws IOException {10         Student s=new Student();11         s.setStuName("张三");12         ByteArrayOutputStream bos=new ByteArrayOutputStream();13         ObjectOutputStream os=new ObjectOutputStream(bos);14         os.writeObject(s);15         os.flush();16         os.close();17         byte[] b=bos.toByteArray();18         System.out.println("jdk序列化长度:"+b.length);19         bos.close();20         System.out.println("二进制序列化长度:"+s.codeC().length);21     }22 }

先建立一个名叫Student的普通类并序列化,然后test一下。

结果如下:

jdk序列化长度:88

二进制序列化长度:8

 

结论就是序列化性能比二进制编码还低下。网络传输占用了数据量,会影响整个程序的吞吐量的,这显而易见了。

 

显然我们通常不会选择java序列化作为远程跨借点调用的编码框架,那如何了,在研究一下了呗.

 

 

 

天天学习,天天进步......学以致用

 

转载地址:http://cahzo.baihongyu.com/

你可能感兴趣的文章
zabbix(一)zabbix环境的搭建
查看>>
zabbix 安装 weathermap
查看>>
清除SVN版本控制文件
查看>>
Android 中文 API (29) —— CompoundButton
查看>>
CentOS6无法本地登陆,ssh远程登陆没问题
查看>>
android 实现透明状态栏
查看>>
误删除、误格式化数据灾难应急方案(WINDOWS平台)
查看>>
位运算技巧
查看>>
原型模式
查看>>
继承与派生
查看>>
Tengine + uwsgi + django平台搭建
查看>>
View Horizon Mirage安装手册(三)——Mirage Management安装
查看>>
SQL触发器总结
查看>>
利用组策略管理Microsoft Office 2007
查看>>
Linux 系统运维学习方法汇总
查看>>
Zabbix监控之检测程序日志中错误发生的次数
查看>>
Msg 15138 The database principal owns a schema in the database, and cannot be dropped.
查看>>
Tomcat6.0连接器源码分析
查看>>
Cassandra 中的Snitch
查看>>
Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
查看>>