概述
通过前几篇博客的介绍,我们知道 Netty 是一款高性能客户端、服务端框架,它底层通过 NIO 实现非阻塞传输流数据。其中前几篇测试 Demo 我们都是通过将字符串转字节数组的形式进行交互,然而实际应用场景中几乎很少用到字符串作为源数据,大部分数据结构都被封装为类对象的形式,本篇博客我就来简单介绍下 Netty 一般是如何发送和接收类对象信息的:
Netty 如何发送(接收)类对象
在正式开始介绍前,我们先了解序列化、反序列化的概念:
- 序列化:Java 类对象转化为流数据的这个过程就叫序列化
- 反序列化:流数据转化为 Java 类对象的过程就叫反序列化
关于序列化、反序列化不了解的读者可以 点击这里 查看我之前的博客。
这里所说的流就是我们平常客户端、服务端进行交互过程中的数据格式,也就是说 Netty 可以通过将类对象序列化为流文件的形式进行数据传输。既然如此,是不是意味着 Netty 可以直接使用 Java 原生的序列化、反序列技术实现客户端和服务端的对象交互呢?
答案是肯定的,但 Netty 框架并没有这样做,具体原因主要集中在以下几点:
- 无法跨语言:只能在客户端和服务端都是 Java 平台下使用,C++、python 等无法序列化以及识别结构
- 序列化后码流大:类对象采用 Java 序列化后往往占用更大的字节数组,也就是说带宽消耗更大,传输效率更低
- 序列化性能太低ÿ