ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

序列化工具-protobuf-序列化和反序列化用法

2021-01-17 23:59:51  阅读:539  来源: 互联网

标签:jason protobuf System 用法 Student 序列化 com


一、环境依赖:

1、maven依赖:

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>3.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.grpc/grpc-all -->
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-all</artifactId>
    <version>1.11.0</version>
</dependency>
<!--protobuf相关end-->
<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.5.0.Final</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.0</version>
            <configuration>
                <protocArtifact>
                    com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier}
                </protocArtifact>
                <pluginId>grpc-java</pluginId>
                <pluginArtifact>
                    io.grpc:protoc-gen-grpc-java:1.11.0:exe:${os.detected.classifier}
                </pluginArtifact>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>compile-custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

2、IDEA开发环境支持protobuf插件:

      参考:https://blog.csdn.net/jason_jiahongfei/article/details/112760010

 

二、序列化&反序列化:

package com.jason.seria.protobuf;

import com.google.protobuf.InvalidProtocolBufferException;
import com.jason.ISerializer;
import com.jason.seria.Student;
import com.jason.seria.kryo.KryoSerializer;

public class TestMain {
    public static void main(String[] args) {
        ProtoDemo.Student.Builder builder=ProtoDemo.Student.newBuilder();
        builder.setName("jason");
        builder.setAge(18);

        ProtoDemo.Student info = builder.build();
        System.out.println(info);
        long t1 = System.nanoTime();
        byte[]  result=info.toByteArray();
        System.out.println("序列化耗时="+(System.nanoTime()-t1));
        System.out.println("protobuf 序列化长度 result:"+result.length);

        try {
            long t3 = System.nanoTime();
            ProtoDemo.Student  student=ProtoDemo.Student.parseFrom(result);
            System.out.println("反序列化耗时="+(System.nanoTime()-t3));
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
    }
}

  运行结果: 压缩的字节码长度只有9!!!!!! 

name: "jason"
age: 18

序列化耗时=2822000
protobuf 序列化长度 result:9
反序列化耗时=63000

  当然相对于XML,jason 序列化协议, protobuf可读性肯定是没有了,没有办法调试。具体性能对比可以看我整理对比数据

 

 

 

 

 

 

 

 

标签:jason,protobuf,System,用法,Student,序列化,com
来源: https://blog.csdn.net/jason_jiahongfei/article/details/112759953

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有