protostuff java_protostuff 及其注意事项

protostuff java_protostuff 及其注意事项google开发的开源的序列化方案protocolbuffer(简称protobuf),它的好处很多,独立于语言,独立于平台,最最重要的是它的效率相当高,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一。protostuff是一个基于protobuf实现的序列化方法,它较于protobuf最明显的好处是,在几乎不损耗性能的情况下做到了不用…

大家好,又见面了,我是你们的朋友全栈君。

google开发的开源的序列化方案protocol buffer(简称protobuf),它的好处很多,独立于语言,独立于平台,最最重要的是它的效率相当高,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一。

protostuff是一个基于protobuf实现的序列化方法,它较于protobuf最明显的好处是,在几乎不损耗性能的情况下做到了不用我们写.proto文件来实现序列化

io.protostuff

protostuff-runtime

1.3.8

io.protostuff

protostuff-core

1.3.8

public class ProtolStuffSerializeDemo {

public static void main(String[] args) {

Divide divide = new Divide();

System.err.println(divide);

Schema divideSchema = RuntimeSchema.getSchema(Divide.class);

LinkedBuffer buffer = LinkedBuffer.allocate(512);

ByteArrayOutputStream byteArrayOutputStream;

byte[] bytes = null;

try {

byteArrayOutputStream = new ByteArrayOutputStream();

ProtostuffIOUtil.writeTo(byteArrayOutputStream, divide, divideSchema, buffer);

bytes = byteArrayOutputStream.toByteArray();

System.err.println(String.format(“length : %d value %s” ,bytes.length , new String(bytes)));

for(byte b: bytes) {

System.err.print(“[” + (char)b + “]”);

System.err.print(b + ” “);

}

System.err.println();

} catch (IOException e) {

e.printStackTrace();

}

Lily lily = new Lily();

ProtostuffIOUtil.mergeFrom(bytes, lily, divideSchema);

System.err.println(lily);

}

}

@Data

class Divide {

String name = “divide”;

String age = “a”;

String age1 = “b”;

String age2 = “c”;

String age3 = “d”;

String age4 = “e”;

}

@Data

class Lily {

int age;

String name;

}

「招俊坚:「张兴业:cellar 序列化使用了 protostuff,总结了一下需要注意的事项:

// 不允许以下行为出现:

// 不允许用泛型 java.lang.Object

// 不允许继承接口、继承类 interfaces

// 不允许使用数组 arrays

// 不允许使用枚举 enum

// 不允许使用泛型的集合。比如:允许 List 但是不允许 List

// 不允许使用两层以上容器这种复杂结构。比如:不允许 List

// ==========

// (1)字段使用 @Tag 注解。表示第几个字段。值不能重复。

// (2)不能删除字段。使用 @Deprecated 注解代替。

// (3)不序列化某个字段。使用 transient java 关键字声明。」

——————————

Cellar的protostuff的@Tag是无效的」

——————————

嗯,我们也是自己用新版的 protostuff 序列化的。直接用 cellar 的 byte[] 接口

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133927.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 进制转换python实验五_python进制转换:十进制转二进制的用法「建议收藏」

    进制转换python实验五_python进制转换:十进制转二进制的用法「建议收藏」我们在学习python时候肯定会碰到关于进制转换,其实这是非常简单的,这个就像小学学习数学乘法口诀意义,只要记住转换口诀即可轻松应用,一起来看下具体的操作内容吧~一、python进制转换dec(十进制)—>bin(二进制)dec(十进制)—>oct(八进制)dec(十进制)—>hex(十六进制)二、十进制我们所熟知的十进制,其实是从0开始,数到9之后,就跳到10,…

    2022年5月19日
  • pycharm所有文件中查找_python查找文件

    pycharm所有文件中查找_python查找文件PyCharm的FindinPath功能提供了全局查找功能,快捷键为Ctrl+Shift+F。Find则是在当前文件查找,快捷键为Ctrl+F。这两个个功能非常实用。FindinPath的使用:按快捷键Ctrl+Shift+F或从从菜单Edit-》Find-》FindinPath进入全局查找界面。如下图所示,在Texttofind输入要查找的内容,可以说某

    2022年8月25日
  • Eclipse使用之导入Maven项目详解[通俗易懂]

    Eclipse使用之导入Maven项目详解[通俗易懂]通俗的来说,Maven就是个类似于git的项目管理工具。而SpringMVC就是将M(Model)、V(View)、C(Controller)三者进行分离进行处理,更有利于开发的进行。下面我将介绍一个别人已经编译好的Maven项目扔给你应该怎样导入到集成开发环境中。开发环境:EclipseStep1:在Eclipse中,选择File->Import;接着如下图所示:点击Browse,选择

    2022年5月29日
  • ios-anchorPoint、position理解[通俗易懂]

    ios-anchorPoint、position理解[通俗易懂]anchorPoint(锚点)是layer的一个属性,下面我们来看看其对view的影响,本文主要通过图片方式展现:锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是(1,1),经过试验这个是错的,实际上:图层左上角是{0,0},右下角是{1,1},取值范围不限。单位坐标的意思是指以视图长款为单位来计算,坐标系展示如下:默认一个视图的锚

    2022年10月8日
  • VBScript FormatDateTime 函数

    定义和用法FormatDateTime函数可格式化并返回一个合法的日期或时间表达式。语法FormatDateTime(date,format)参数描述date必需的。任何合法的日期表达式。(比如Date()或Now())format可选的。规定所使用的日期/时间格式的格式值。format参数:常数值描述…

    2022年4月7日
  • 仿朋友圈相册图片选择以及画廊效果「建议收藏」

    仿朋友圈相册图片选择以及画廊效果「建议收藏」仿朋友圈相册图片选择以及画廊效果1.效果展示2.导入相关第三方库依赖3.编写选择图片页面a.编写布局b.编写Activityc.相册选择工具类部分代码d.相册4宫图适配器4.编写画廊页面a.编写画廊页面b.编写Activityc.画廊适配器5.源码1.效果展示该demo适配Android6、7、10。画廊效果,支持缩放效果。视频展示:(等我B站视频审核通过再来修改)部分截图:文章有点长,如果没时间就拉到最底下下载源码,再给个一键三联哈(* ̄︶ ̄)2.导入相关第三方库依赖站在巨人的肩膀上,

    2022年5月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号