您的位置:首页 > 编程语言 > Go语言

google protobuf 源码解析

2010-06-06 15:12 1951 查看
Message抽象层,记录了一个proto文件里的所有内容

MessageLite:轻量级的接口协议
这个接口由所有协议的消息对象来实现。一个MessageLite子类的子类实现了它的接口。当您使用MessageLite而只需要它的接口子集 - 即没有使用descriptors或reflection。你可以使编译器生成的类协议而只实现MessageLite的部分接口,只需在.proto文件中增加如下内容:
option optimize_for = LITE_RUNTIME;
这一点尤其在资源有限的运行时库系统中,缓冲区的完整协议有很大的用处。
注意,在非约束系统(如服务器)当您需要连接更多的协议定义,一个更好的来降低总的代码量的方式是使用optimize_for = CODE_SIZE。这将使得生成的代码更小的同时还支持在所有的速度为代价的(相同的功能)。 当只有很小的数量级的消息类型连接到你的二进制文件时,使用optimize_for =
LITE_RUNTIME是最好的选择,
主要函数:

tokenizer.h、tokenizer.cpp里的Tokenizer分词器:构造了一个将传入的文本进行阅读并分析的分词器。分词时将一个一个的词来划分出来并标识其类型,类型有:TYPE_START(起始,没有任何内容)、TYPE_END(结束,没有内容)、TYPE_IDENTIFIER(标识为空格)、TYPE_INTEGER(整数型)、TYPE_FLOAT(浮点数型)、TYPE_STRING(字符串型)、TYPE_SYMBOL(任何其他可打印字符,如“!+$%”,总是一个字符)
Parser:该类功能:解析.proto文件,该类利用词法分析器,进行解析,将解析的内容放入到FileDescriptorProto中
ReflectionOps:两个相关的Message之间的操作,包括拷贝、合并等
Reflection:包含可用于动态访问和修改该领域的协议消息的方法。它们的语义是类似于编译器生成访问器的协议。这个类独立于Message,纯粹是为效率考虑,作为消息的一个映像。
descriptor.h:这个文件包含了许多描述一种protocol消息的类,通过这些Message的描述在运行时去了解它所包含的域及域的类型。可以通过Message的接口访问或修改特定域的内容。
Descriptor:描述一个特定的消息协议或者包含在消息协议中的一个特定的组,使用Use
DescriptorPool to构建自己的描述。
FieldDescriptor:描述一个Message里的单独的域。使用DescriptorPool来构建自己的描述。
DescriptorPool:用于构建Descriptor,通过读取.proto文件的内容来构建,同时管理内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: