java protostuff 好处,java序列化Protostuff和Serializable的区别
java序列化Protostuff和Serializable的区别
关注:146 答案:1 mip版
解决时间 2021-01-25 06:11
提问者你若离去丶巴掌扇去
2021-01-24 09:03
java序列化Protostuff和Serializable的区别
最佳答案
二级知识专家魔法小仙子
2021-01-24 09:10
序列化就是将Java Object转成byte[];反序列化就是将byte[]转成Java Object。
Java自带序列化机制java.io.Serializable
标识一个对象需要系列化,该对象类型需要实现 Serializable 接口。
1,序列化的类型和反序列化的类型的序列化ID必须一致(远程信息交换时)。
2,静态数据不会被序列化,Transient关键字修饰的字段不会被序列化。
3,对象序列化存储时,两次存储相同值对象会有优化(第二次对象写入会只存储引用)。
Protostuff是一个序列化库,支持一下序列化格式:
protobuf
protostuff (native)
graph (protostuff with support for cyclic references. See Serializing Object Graphs)
json
smile (binary json useable from the protostuff-json module)
xml
yaml (serialization only)
kvp (binary uwsgi header)
序列化
@SuppressWarnings("unchecked")
public static byte[] serialize(T obj) {
Class cls = (Class) obj.getClass();//获得对象的类;
LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);//使用LinkedBuffer分配一块默认大小的buffer空间;
try {
Schema schema = getSchema(cls);//通过对象的类构建对应的schema;
return ProtostuffIOUtil.toByteArray(obj, schema, buffer);//使用给定的schema将对象序列化为一个byte数组,并返回。
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
} finally {
buffer.clear();
}
}
反序列化
public static T deserialize(byte[] data, Class cls) {
try {
T message = objenesis.newInstance(cls);//使用objenesis实例化一个类的对象;
Schema schema = getSchema(cls);//通过对象的类构建对应的schema;
ProtostuffIOUtil.mergeFrom(data, message, schema);//使用给定的schema将byte数组和对象合并,并返回。
return message;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
优缺点比较:
优点 缺点
Serializable 使用方便,可序列化所有类 速度慢,占空间
Protostuff 速度快,基于protobuf 需静态编译
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看
java protostuff 好处,java序列化Protostuff和Serializable的区别相关推荐
- java protostuff 好处_Java 序列化框架性能对比(kryo、hessian、java、protostuff)
简介: 优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Protostuff 速度快,基于protobuf 需静态编译 Protostuff-Ru ...
- java kiwi_【Java拾遗】不可不知的 Java 序列化
[Java拾遗]不可不知的 Java 序列化 前言 在程序运行的生命周期中,序列化与反序列化的操作,几乎无时无刻不在发生着.对于任何一门语言来说,不管它是编译型还是解释型,只要它需要通讯或者持久化时, ...
- Kryo,Hessain,Protostuff三种序列化方式对比
前言 前段时间在写RPC框架的时候用到了Kryo.Hessian.Protostuff三种序列化方式.但是当时因为急于实现功能,就只是简单的的看了一下如何使用这三种序列化方式,并没有去深入研究各自的特 ...
- day04--java高级编程:API:Object、String,Buffer、包装类、日期、java比较器、BigInteger、进制、length区别,IO流,路径,序列化id,编码
1 API 1.1 Api文档下载 1.API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口,一切可以调用的东西都是API. ...
- Java中的对象序列化操作
文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...
- 【译】Java中的对象序列化
前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...
- Java最佳实践–高性能序列化
在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论并演示如何将对象序列化用于高性能应用程序. 所有讨论的主题均基于用例,这些用例来自于电信行业的关键任务超高性能生产系统的开 ...
- JAVA中对象的序列化的作用?
1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比 ...
- Java实体对象为什么一定要实现Serializable接口呢?
文章目录 Java对象为什么要实现Serializable接口? Serializable接口概述 Java对象为什么要实现Serializable接口? 最近这段时间一直在忙着编写Java业务代码, ...
最新文章
- 使用Spring boot,Thymeleaf,AngularJS从零开始构建新的Web应用程序–第3部分
- servlet异步_关于Servlet和异步Servlet
- python数据显示为什么只能显示最后一个变量,Python变量和简单数据类型,之,的
- Android QA
- 转:如何把 SQL Server 的自增标志列清零
- 我有十万块,想自己创业,是做电商还是做实体店?
- Unity(TransForm)
- MySQL 添加列 修改列 删除列
- IOS--多线程--GCD--在CGD中快速实现多线程的并发控制
- linux系统调用的使用例子,Linux增加系统调用步骤和实例
- 生活杂谈-简单电器维修知识-3
- 如何学习有限元分析 有限元分析学习心得
- style.left不起作用的问题
- PDF编辑方法,怎么删除PDF中的一页
- 微信小程序点击查看大图
- 安卓高仿京东淘宝的筛选功能,全网最简单方便
- 关于Too many re-renders. React limits the number of renders to prevent an infinite loop.的解决方案
- android游戏开发实例-可局域网对战的飞行棋(二)
- VirtualBox VBoxManage修改BIOS信息
- 汇编语言的C状态寄存器,汇编指令-状态寄存器、cmp、test、jz等指令详细说明
热门文章
- Nexus9000 版本ACI和nxos切换
- 127.0.0.1的1521端口通,固定IP1521端口不通
- 【UC浏览器】Java平台7.0正式版发布啦
- windows api 扫雷游戏
- 2022.1.31-2022.2.6 AI行业周刊(第83期):如何快速找到人工智能对标公司及产品模式?
- element plus 日期选择器,禁用今天之前的时间
- UE4(虚幻4)里面的物体编辑
- 王慧文因个人健康问题暂时休养;掌趣科技与悠米合作开发AI游戏创作平台;全国人大法工委回应“AI换脸”现象丨每日大事件...
- 三种常用的直线裁剪算法
- 是不是不能用茶水喝药?