您的位置 首页 > 德语词汇

bool是什么意思?用法、例句(protocol buffer的使用)

很多朋友对于bool是什么意思?用法、例句和protocol buffer的使用不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

https://developers.google.com/protocol-buffers这是protocolbuffer的官方网站,上边有详细的使用方式。

bool是什么意思?用法、例句(protocol buffer的使用)

一般常见的序列和反序列方式就是json和xml了,还有Java原生的Serializable,protocolbuffer效率和体积更小,故使用场景一般为游戏,即时通讯等宽带环境不好,要求比较高的场景。

protocolbuffer(以下简称PB)是google的一种数据交换的格式,它独立于语言,独立于平台。google提供了多种语言的实现:java、c#、c++、go和python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用xml进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

https://github.com/protocolbuffers/protobuf/releases需要下载windows版的protocolbuffer工具

下载完毕以后,就是正常的配置环境变量,方便后续的编译

这是解压后的文件目录,protoc.exe就是需要配置环境变量的

此次测试设置的环境变量地址为C:\\Users\\peipe\\Downloads\\protoc-3.12.3-win64\\bin

importlombok.Data;\n\nimportjava.io.Serializable;\n\n@Data\npublicclassPersonimplementsSerializable{\n\n/**姓名*/\nprivateStringname;\n/**年龄*/\nprivateintage;\n/**电话号码*/\nprivateStringphoneNum;\n/**身高*/\nprivatedoubleheight;\n/**性别*/\nprivatebooleansex;\n\n}\n```\n---\n```\npackagecom.gitee.asand;\n\nimportcom.alibaba.fastjson.JSONObject;\nimportlombok.extern.slf4j.Slf4j;\n\nimportjava.io.ByteArrayOutputStream;\nimportjava.io.IOException;\nimportjava.io.ObjectOutputStream;\nimportjava.util.Arrays;\n\n@Slf4j\npublicclassApp{\n\npublicstaticvoidmain(String[]args)throwsIOException{\nlog.info("[测试jdk,json,protocolbuffer三种方式的优劣]");\nPersonperson=create();\nByteArrayOutputStreamout=newByteArrayOutputStream();\nObjectOutputStreamoos=newObjectOutputStream(out);\noos.writeObject(person);\noos.flush();\nlog.info("[jdk方式======》start]");\nSystem.out.println(Arrays.toString(out.toByteArray()));\nSystem.out.println(out.toByteArray().length);\nlog.info("[jdk方式======》end]");\n\nlog.info("[json方式======》start]");\nSystem.out.println(Arrays.toString(JSONObject.toJSONString(person).getBytes()));\nSystem.out.println(JSONObject.toJSONString(person).getBytes().length);\nlog.info("[json======》end]");\n}\n\n/**\n*创建测试对象\n*\n*@return\n*/\nprivatestaticPersoncreate(){\nPersonp=newPerson();\np.setAge(99);\np.setPhoneNum("13156892351");\np.setHeight(176.6);\np.setSex(true);\nreturnp;\n}\n}

由上图可知,jdk原生的序列化方式体积大,意味着占用的传输宽带更大。

syntax="proto3";\n\noptionjava_package="com.gitee.asand.Person";\noptionjava_outer_classname="Person";\n\nmessagePerson{\nrequiredstringname=1;\nrequiredint32age=2;\nrequiredstringphoneNum=3;\nrequireddoubleheight=4;\nrequiredboolsex=5;\n}

在此目录中创建Person.proto3

protoc--proto_path=src--java_out=build/gensrc/foo.proto//官方例句\n\nprotoc--proto_path=C:\\Users\\peipe\\Downloads\\testproto--java_out=C:\\Users\\peipe\\Downloads\\testproto\\outC:\\Users\\peipe\\Downloads\\testproto\\Person.proto3

运行此命令,得到生成文件

把当前生成的文件拷贝到测试项目中

packagecom.gitee.asand;\n\nimportcom.alibaba.fastjson.JSONObject;\nimportlombok.extern.slf4j.Slf4j;\n\nimportjava.io.ByteArrayOutputStream;\nimportjava.io.IOException;\nimportjava.io.ObjectOutputStream;\nimportjava.util.Arrays;\n\n@Slf4j\npublicclassApp{\n\npublicstaticvoidmain(String[]args)throwsIOException{\nlog.info("[测试jdk,json,protocolbuffer三种方式的优劣]");\nPersonperson=create();\nByteArrayOutputStreamout=newByteArrayOutputStream();\nObjectOutputStreamoos=newObjectOutputStream(out);\noos.writeObject(person);\noos.flush();\nlog.info("[jdk方式======》start]");\nSystem.out.println(Arrays.toString(out.toByteArray()));\nSystem.out.println(out.toByteArray().length);\nlog.info("[jdk方式======》end]");\n\nlog.info("[json方式======》start]");\nSystem.out.println(Arrays.toString(JSONObject.toJSONString(person).getBytes()));\nSystem.out.println(JSONObject.toJSONString(person).getBytes().length);\nlog.info("[json======》end]");\n\nlog.info("[protocolbuffer方式======》start]");\nPersonProto3.PersonbuildPerson=PersonProto3.Person.newBuilder()\n.setAge(person.getAge())\n.setName(person.getName())\n.setPhoneNum(person.getPhoneNum())\n.setSex(person.isSex())\n.setHeight(person.getHeight()).build();\nSystem.out.println(Arrays.toString(buildPerson.toByteArray()));\nSystem.out.println(buildPerson.toByteArray().length);\nlog.info("[protocolbuffer方式======》end]");\n}\n\n/**\n*创建测试对象\n*\n*@return\n*/\nprivatestaticPersoncreate(){\nPersonp=newPerson();\np.setName("测试");\np.setAge(99);\np.setPhoneNum("13156892351");\np.setHeight(176.6);\np.setSex(true);\nreturnp;\n}\n}

可以明显看到,protocolbuffer生成的体积很小,可知,在同样的宽带下,速度更快,如果数据量更大的话,差距更明显。

log.info("[protocolbuffer方式======》start]");\nPersonProto3.PersonbuildPerson=PersonProto3.Person.newBuilder()\n.setAge(person.getAge())\n.setName(person.getName())\n.setPhoneNum(person.getPhoneNum())\n.setSex(person.isSex())\n.setHeight(person.getHeight()).build();\nbyte[]content=buildPerson.toByteArray();\nSystem.out.println(Arrays.toString(content));\nSystem.out.println(content.length);\nlog.info("[protocolbuffer方式======》end]");\n\n\nlog.info("[protocolbuffer反序列化]");\nPersonProto3.Personperson1=PersonProto3.Person.parseFrom(content);\nSystem.out.println(person1);

protocolbuffer简单的使用例子就展示完毕了。

如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023