java编解码技术,netty nio

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

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

时间: 2025-01-04 14:03:32

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

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

1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2.适用场景 小编觉得当数据采用json传输的时候,适用与web与控制层的转换,前端js对json的支持较好,而程序内部系统与系统之间采用二进制序列化编码形式进行编码进行数据传输,这样可提高数据传输效率 3.优缺点 json序列化有点就是通俗易懂,常用,易于与前端交互,缺点就是没有二进制序列化后的数据传

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

Netty 编解码技术 数据通信和心跳监控案例 多台服务器之间在进行跨进程服务调用时,需要使用特定的编解码技术,对需要进行网络传输的对象做编码和解码操作,以便完成远程调用.Netty提供了完善,易扩展,易使用的编解码技术.本章除了介绍Marshalling的使用,还会基于编解码技术实现数据通信和心跳检测案例.通过本章,你将学到Java序列化的优缺点,主流编解码框架的特点,模拟特殊长连接通信,心跳监控案例.还在等什么,丰满的知识等你来拿! 技术:编解码,数据通信,心跳监控 说明:github上有完

MessagePack编解码技术介绍与使用

[toc] MessagePack编解码技术介绍与使用 编解码技术介绍 Java中本身技术序列化技术,即使用ObjectInputStream和ObjectOutputStream即可完成对象的序列化和反序列化,目的主要有如下: 对象持久化存储 网络传输 当然,因为最近学习主要是学习Netty,所以这里更多是出于网络传输的目的,所以对于编解码的基本解释,可如下: 编码:将Java对象转化为字节数组或ByteBuffer对象: 解码:将字节数组或ByteBuffer对象转化为Java对象: 当然因

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

<H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅.绝知此事要躬行".仅仅有自己依照标准文档以代码的形式操作一遍,才干对视频压缩编码标准的思想和方法有足够深刻的理解和体会. 链接地址:H.264/AVC视频编解码技术具体解释 GitHub代码地址:点击这里 1. H.264的CAVLC

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

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流

【H.264/AVC视频编解码技术详解】十一、H.264的Slice Header解析

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 H.264中的条带(Slice) 1. Slic

编解码技术学习网站汇总

1.音视频开源 1.1 FFMPEG http://www.ffmpeg.org/ http://dranger.com/ffmpeg/ Ffmpeg Basic http://ffmpeg.tv/ http://www.libav.org/ 1.2 H264/AVC http://www.videolan.org/developers/x264.html 1.3 H265/HEVC 1.HM(HEVC test Model) 团队名称 Joint Collaborative Team on V

【H.264/AVC视频编解码技术详解】十三、熵编码算法(3):CAVLC原理

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 上下文自适应的变长编码(Context-base

[总结]视音频编解码技术零基础学习方法

一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西. 0.     生活中的视音频技术 平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影.(其实专业的影视爱好者一概会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一起) 因为下载的来源不同,这