Java NIO - 序列化与反序列化 - 使用JSON协议通信

JSON(JavaScript Object Notation,JS 对象简谱)是一种轻量级的数据交换格式。它是基于 ECMAScript(欧洲计算机协会制定的 JS 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。JSON 协议是一种文本协议,非常易于人阅读和编写,同时也易于机器解析和生成,并能有效地提升网络传输效率。

Java NIO - Netty Decoder 与 Encoder 核心组件

在 Netty 中,数据的流动就像工厂的流水线,核心任务之一是实现二进制数据(ByteBuf)与业务对象(POJO)之间的互相转换:

  • 入站处理 (Inbound) 需要实现字节到对象的转变(拆包解密):底层 Java 通道读取到 ByteBuf 二进制数据,进入流水线。通过 Decoder(解码器),将晦涩难懂的二进制字节码“翻译”成程序可以直接处理的 POJO 业务对象,以实现让后续的业务逻辑处理器能够直接读取结构化数据。
  • 出站处理 (Outbound) 需要实现从对象到字节的转变(封包加密):业务处理完成后,产生一个 POJO 业务对象准备发送。通过 Encoder(编码器),将该对象 “打包” 还原成能够通过网络传输的 ByteBuf 二进制数据,最终交给底层 Java 通道,发送至远端设备。


Java NIO - Netty 的零拷贝

Netty 的零拷贝

零拷贝的必要性回顾

前面我们说过,零拷贝的核心目的是:消除冗余的数据搬运开销,榨干 CPU 和 I/O 的极限性能。在传统 I/O 中,数据在内核缓冲区与用户缓冲区之间频繁 “套娃式” 拷贝,会导致:CPU不断在内核态与用户态间上下文转换,并且CPU也被被大量占用去执行无意义的搬运指令。零拷贝的价值就在于:

  • :通过 mmap 或 sendfile 建立直接映射,数据直接在内核空间或硬件间传输。
  • :减少内存占用,降低总线带宽压力。
  • :降低网络延迟,是大规模高并发系统的性能分水岭。


Java NIO - Netty ByteBuf 详解

Netty ByteBuf 简介

ByteBuf 解决的问题

在 Netty 的高性能架构中,ByteBuf 是其最核心的基石。简单来说,它是 Netty 对 Java 原生 java.nio.Buffer 的重新实现和深度增强。如果把网络传输比作物流,那么 ByteBuf 就是那个装载货物的 “智能集装箱”。