对于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 mingge
10 *
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序列化作为远程跨借点调用的编码框架,那如何了,在研究一下了呗.

java编解码技术,netty nio的更多相关文章

  1. java编解码技术,json序列化与二进制序列化

    1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2. ...

  2. Netty 源码 ChannelHandler(四)编解码技术

    Netty 源码 ChannelHandler(四)编解码技术 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.拆包与粘 ...

  3. (中级篇 NettyNIO编解码开发)第六章-编解码技术

    基于Java提供的对象输入/输出流ObjectlnputStream和ObjectOutputStream,可以直接把Java对象作为可存储的字节数组写入文件,也可以传输到网络上.对程序员来说,基于J ...

  4. Netty 编解码技术 数据通信和心跳监控案例

    Netty 编解码技术 数据通信和心跳监控案例 多台服务器之间在进行跨进程服务调用时,需要使用特定的编解码技术,对需要进行网络传输的对象做编码和解码操作,以便完成远程调用.Netty提供了完善,易扩展 ...

  5. netty权威指南学习笔记六——编解码技术之MessagePack

    编解码技术主要应用在网络传输中,将对象比如BOJO进行编解码以利于网络中进行传输.平常我们也会将编解码说成是序列化/反序列化 定义:当进行远程跨进程服务调用时,需要把被传输的java对象编码为字节数组 ...

  6. Netty编解码技术

    编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二对象持久化. 虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤比较多,比如java序 ...

  7. Netty编解码技术和UDP实现

    背景 作为网络传输框架,免不了传输对象,对象在传输之前就要序列化,这个序列化的过程就是编码过程.接收到编码后的数据就需要解码,还原传输的数据. 编解码技术就是java序列化技术,序列化的目的有两个,一 ...

  8. [转帖]AVS音视频编解码技术了解

    AVS高清立体视频编码器 电视技术在经历了从黑白到彩色.从模拟到数字的技术变革之后正在酝酿另一场技术革命,从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视3DTV.3DTV系统的核心问题之一是 ...

  9. 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

    <H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.2 ...

随机推荐

  1. ElasticSearch入门系列(五)数据

    序言:无论程序如何写,最终都是为了组织数据为我们服务.在实际应用中,并不是所有相同类型的实体的看起来都是一样的.传统上我们使用行和列将数据存储在关系型数据库中相当于使用电子表格,这种固定的存储方式导致 ...

  2. 用自己的话描述wcf中的传输安全与消息安全的区别(三)

    消息交换安全模式 PS:很多书上把transfer security和transport security都翻译成“传输安全”,这样易混淆.我这里把transfer说成消息交换安全. 安全的含义分为验 ...

  3. java 数据绑定的几种方式及相关注意事项-持续更新

    spring mvc 中会遇到各种数据绑定,有些不常用的,但是千万不要觉得不可以,没有什么是不可以的,只要能够想到,就可以. 数据绑定方式: 1. 注意: 当数据为包装类型的数字型时,如果Long h ...

  4. openldap+phpadmin的搭建安装

    1.概念介绍 LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据 ...

  5. 【POJ 3415】Common Substrings 长度不小于k的公共子串的个数

    长度不小于k的公共子串的个数,论文里有题解,卡了一上午,因为sum没开long long!!! 没开long long毁一生again--- 以后应该早看POJ里的Discuss啊QAQ #inclu ...

  6. Laplacian算子

    多元函数的二阶导数又称为Laplacian算子: \[ \triangledown f(x, y) = \frac {\partial^2 f}{\partial x^2} + \frac {\par ...

  7. 网络流 最大流HDU 3549

    //////////在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4->2反向弧的话,则无法进一步增广,最终答案为2,显然是不对的, ...

  8. d3-画雷达图-圆形弧线

    本文转载 终极效果 源码 index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Co ...

  9. highchart去掉highcharts.com及导出

    右下角默认会有highcharts.com credits: { enabled:false} 导出服务用于Highcharts导出功能,即通过导出服务器将图表导出为常见图片格式或 PDF 文档. 默 ...

  10. win7下php5.6安装redis扩展

    redis扩展下载 http://windows.php.net/downloads/pecl/snaps/redis/ 查看phpinfo()信息 Compiler Architecture 选择合 ...