序列化
序列化与反序列化
序列化是将对象转换为二进制形式(如字节数组),通常用于网络传输、数据持久化等目的。反序列化则是将这些字节数组还原成原始对象,主要用于完成远程调用。
关键因素
- 码流大小:影响网络带宽的占用。
- 序列化性能:影响CPU资源的占用。
- 跨语言支持:影响异构系统的对接和开发语言的切换。
序列化技术 | 优点 | 缺点 | 适用场景 |
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 | 需要注册 | - |
Loading...