Netty 学习笔记(八)、Netty 如何发送(接收)类对象

本文介绍了Netty如何处理类对象的发送与接收,指出Netty不使用Java原生序列化的原因,包括跨语言限制、大码流和低性能。接着,文章讨论了主流的编解码框架,如Protobuf的高性能、结构化存储和语言无关性,Thrift的编解码方式和传输效率,以及JBoss Marshalling的优化特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

通过前几篇博客的介绍,我们知道 Netty 是一款高性能客户端、服务端框架,它底层通过 NIO 实现非阻塞传输流数据。其中前几篇测试 Demo 我们都是通过将字符串转字节数组的形式进行交互,然而实际应用场景中几乎很少用到字符串作为源数据,大部分数据结构都被封装为类对象的形式,本篇博客我就来简单介绍下 Netty 一般是如何发送和接收类对象信息的:


Netty 如何发送(接收)类对象

在正式开始介绍前,我们先了解序列化、反序列化的概念:

  • 序列化:Java 类对象转化为流数据的这个过程就叫序列化
  • 反序列化:流数据转化为 Java 类对象的过程就叫反序列化

关于序列化、反序列化不了解的读者可以 点击这里 查看我之前的博客。

这里所说的流就是我们平常客户端、服务端进行交互过程中的数据格式,也就是说 Netty 可以通过将类对象序列化为流文件的形式进行数据传输。既然如此,是不是意味着 Netty 可以直接使用 Java 原生的序列化、反序列技术实现客户端和服务端的对象交互呢?

答案是肯定的,但 Netty 框架并没有这样做,具体原因主要集中在以下几点:

  1. 无法跨语言:只能在客户端和服务端都是 Java 平台下使用,C++、python 等无法序列化以及识别结构
  2. 序列化后码流大:类对象采用 Java 序列化后往往占用更大的字节数组,也就是说带宽消耗更大,传输效率更低
  3. 序列化性能太低ÿ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值