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)
上一篇 2022年5月2日 上午10:20
下一篇 2022年5月2日 上午10:20


相关推荐

  • 协同过滤算法

    协同过滤算法###1.协同过滤算法协同过滤(CollaborativeFiltering)推荐算法是最经典、最常用的推荐算法。所谓协同过滤,基本思想是**根据用户之前的喜好以及其他兴趣相近的用户的选择

    2022年7月2日
    23
  • 为什么要Time_wait

    为什么要Time_waitTime_wait啊,老哥们肯定会想,time_wait什么鬼?为毛我主动断开tcp连接。发完最后一个ACK后不能直接断开连接啊,我能做的都做了。但是…..老铁们你们想一下,ACK丢包是不会重传的,但是FIN呢?最后被动关闭的一直要是收不到ACK它会怎么想,它肯定认为FIN包丢包了,那怎么样,重发呗。重发之后呢,如果对端一直不会回复ACK,那么重传一定次数后就会发送重置报文段然后断开连接

    2022年5月29日
    36
  • oracle 主键删除,联合主键的创建

    oracle 主键删除,联合主键的创建

    2021年12月9日
    55
  • linux重启网卡命令_linux网卡服务起不来怎么办

    linux重启网卡命令_linux网卡服务起不来怎么办修改了ip,如果没有重启网卡,一般是没有奏效的。Linux下网卡重启的命令为:/etc/init.d/networkrestart或者是/etc/init.d/networkingrestart或者重启网络服务:servicenetworkrestart在ubuntu下指定控制哪个网卡(其中eth0为网卡名):sudoifdowneth…

    2022年10月17日
    5
  • ftp文件上传及下载工具类[通俗易懂]

    ftp文件上传及下载工具类[通俗易懂]1、ftp文件上传用例解析(需使用apacher的commons-net-3.3.jar)publicclassTestFtp{@Testpublicvoidtest()throwsException{//1、创建FTP客户端FTPClientftpClient=newFTPClient();//2、

    2022年6月6日
    31
  • realme gt neo刷鸿蒙(realmegt大师探索版值得入手吗)

    realme真我GTNeo于上月31日举行了发布会,于4月8日零点正式开售。realmeGTNeo首发搭载天玑1200旗舰芯片、120Hz电竞屏等,12GB+256GB版本仅售2299元。天玑1200性能强劲,真我GTNeo可谓是两千元档最强性能旗舰手机,学生党入手也毫无压力。本次真我GTNeo瞄准年轻市场,专为Z世代量身打造。在外观上,GTNeo推出了最终幻想、骇客黑与极客…

    2022年4月15日
    253

发表回复

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

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