序列化与反序列化

序列化是将对象转换为二进制形式(如字节数组),通常用于网络传输数据持久化等目的。反序列化则是将这些字节数组还原成原始对象,主要用于完成远程调用

关键因素

序列化技术 优点 缺点 适用场景
Java默认序列化 - 无法跨语言、码流大、性能差 -
XML 人机可读性好、可指定名称 文件庞大、格式复杂、不包含类型信息 配置文件存储、数据转换
JSON 兼容性高、简单易读写、数据较小、可扩展性好 数据描述性差、不适合ms级别性能要求 跨防火墙访问、Web浏览器Ajax请求
Fastjson 接口简单易用、序列化速度快 注重速度牺牲标准和功能性、文档不全 协议交互、Web输出、Android客户端
Thrift 体积小、速度快、支持多语言和数据类型 使用者少、不安全、调试难、不支持持久层直接读写 分布式系统RPC
Avro 支持丰富数据类型、自我描述、提高解析速度 对静态类型语言用户不直观 Hadoop中的数据格式
Protobuf 码流小、性能高、结构化数据格式 需要工具生成代码、支持语言较少 高性能RPC、跨防火墙访问、应用层持久化
Protostuff 基于protobuf、无需.proto文件 - 高性能RPC、简化开发流程
JBoss Marshalling 直接序列化Java类 - -
MessagePack 高效二进制序列化 - -
Hessian 二进制轻量级远程调用 - -
Kryo 基于protobuf、只支持Java 需要注册 -