FlatBuffers学习笔记二

flatbuffer使用教程 Flatbuffer定义scheme的规则和使用例子代码 阅读详情

FlatBuffers学习笔记二

一.为什么要使用FlatBuffers

在传输数据的过程中,无论是使用xml,html,还是json等,最终都是直接对数据进行操作。在这中间都存在编码和解码的过程,

然而FlatBuffers是直接对数据进行操作,仅仅增加了VTable和偏移量两个实体

FlatBuffers的特点:简单,高效,便利。

简单:————首先定义好协议文件(schema),然后使用工具编译成源码文件,就可以直接调用源码的接口来操作数据。

效率高:————FlatBuffers数据在缓冲区内都是平整的,可以直接访问,

便利:————FlatBuffers的协议文件设计好后就可以直接发布,任何人拿到这个协议都可以编译成源码来对数据进行操作,这对团队开发很有利,另外,FlatBuffers不用担心协议文件设计不周全的问题,因为你可以随便在table中添加或者删除成员。

二.为什么不使用FlatBuffers

  1. 效率虽然高,但是太消耗内存;
  2. FlatBuffers传输的数据较大;
  3. FlatBuffers打包后其中的矢量数据不能随意的修改;
  4. FlatBuffers的union类型不支持大于256哥类型,
  5. FlatBuffers传输数据没有json,xml,html等那么直观,

三.FlatBuffers详解

FlatBuffers其实就是一个保存了一系列标量矢量的缓冲区,其中的标量矢量可以直接访问。但是,如果一旦数据缓冲区构建成功,就不能随便修改其中的矢量,除非矢量长度不大于构造时的长度,且矢量保存的不是【偏移量,否则会产生错误。

3.1标量

所有的整型变量和浮点变量都是标量,长度是固定的,

FlatBuffers中的偏移量也是标量,所以在构造后不能随便修改,
struct结构也可以当做标量来看待。

3.2矢量

字符串和数组是矢量,字符串是以‘\0’结尾的,矢量的开头必须是一个32位的长度,用来指明矢量的长度,这个长度不包括‘\0’和长度本身所占的空间。

四.数据结构

struct————是不可更改的结构;(访问速度快,不可占用内存小);

table————可以随意增加或者删除成员,是一个灵活的类型,

root type————一个顶级类型,

union————是一个重要的类型,是封包分支的重要方法。

如果想要支持大于256个类型,必须通过union+table+union这个方式来扩充;如下:


//第二层union

table T2_1_t{//分支1

A1:int;


}

table T2_2_t{//分支2

A2:int;

}

union U2_1_t{
T2_1_t,
T2_1_t
}

table T2_3_t{//分支3

A3:int;

}

table T2_4_t{//分支4

A4:int;

}

union U2_2_t{

T2_3_t,
T2_4_t

}

//第一层union
table T1_1_t{
 u:U2_1_t(id:1);//注意,由于union的类型占一个id,所以这里是1,不是0,0已经默认分配给type了

}

table T1_2_t{
 u:U2_2_t(id:1);//注意,由于union的类型占一个id,所以这里是1,不是0,0已经默认分配给type了

}

union U1_1_t{//可以至少支持多达256*256=65536个消息分支

T1_1_t,

T1_2_t

}
//应用,这个Table可以至少支持多达256*256=65536种内容

table T_t{
u:U1_1_t(id:1);//注意,由于union的类型占一个id,所以这里是1,不是0,0已经默认分配给type了
}

总结:

FlatBuffers构造数据总的来说有两种,标量和矢量(即固定长度数据和可变长度数据)

参考:

http://pan.baidu.com/s/1pJWZ8L1

序列化与反序列化之Flatbuffers(二):深入剖析 序列化与反序列化之Flatbuffers(二):深入剖析 一: 前言 上一篇介绍了Flatbuffers的基本情况和基本使用方法, 现在我们对这个序列化的过程比较感兴趣, 或者说想要知道序列化后这个信息是以什么样形式存储起来了. 在网上也看到一些讲Flatbuffers内部保存结构的, 基本都用的下面这样一张图. 这张图基本意思是对了, 但是细节上不对的!!!我不知道是否是因为版本迭代的缘故, 至少目前2021年4月最新的Flatbuffers细节上与那张图不一样. 二: 回顾 table Person 阅读详情

相关推荐

FlatBuffers使用总结(2)

一、FlatBuffers概述: Google在今年6月份发布了跨平台序列化工具FlatBuffers,提供了C++/Java/Go/C#接口支持,这是一个注重性能和资源使用的序列化类库。相较于Protocol Buffers,其更适用于移动设备,FlatBuffers提供更高的性能以及更低的资源需求。 二、FlatBuffers特点: 不需要打包/解包。它的结构化数据都...

程序猿老樊的博客 2165

FlatBuffers使用详解

简介 FlatBuffer 是一个二进制 buffer,它使用 offset 组织嵌套对象(struct,table,vectors,等),可以使数据像任何基于指针的数据结构一样,就地访问数据。 然而 FlatBuffer 与大多数内存中的数据结构不同,它使用严格的对齐规则和字节顺序来确保 buffer 是跨平台的。 FlatBuffers 的主要目标是避免反序列化。这是通过定义二进制数据协议来...

guotianqing的博客 1万+

FlatBuffers使用总结(3)

1、IDL测试文件 // Example IDL file for our monster's schema. namespace MyGame.Sample; enum Color:byte { Red = 0, Green, Blue = 2 } union Equipment { Weapon } // Optionally add more tables. struct Vec3 { ...

程序猿老樊的博客 3768

Flatbuffers

json的性能虽然很低但其可读性强,数据结构更改便捷。性能方面,数据量小的时候,性能影响并不是很大,flatbuffers的提升不太明显。flatbuffers适合数据量交互很大,或者很频繁的应用来使用。而其不便之处就在于它存储的是字节,基本无法直观读取,当然这也有好处,别人截获数据,没有对应的schema文件几乎无法获得任何信息。2、个人水平有限所以很少涉及它的原理等深层次的东西,只是介绍了其基本使用方法,更多的是给自己留个底吧。

weixin_39459401的博客 1602

深度学习入门:一文详解BP神经网络

在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少。实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层。上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调。在BP神经网络中,输入层节点没有阀值。神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据。要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训。

Machine Learning with Tutors 4万+

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 701

flatbuffers(c++)的深入理解和使用案例(二)

flatbuffers的详细介绍和使用案例

m0_67254672的博客 4563

张正友标定法_单目-线激光三维扫描系统中光刀平面的标定

单目-线激光三维扫描系统中光刀平面的标定线结构光有结构简单、精度高、测速快等特点,被广泛应用于三维重建领域。线结构光三维扫描系统由一个相机和一个线结构光投射器构成,线结构光投射器将线结构光投射到被测物体表面,相机采集带有线激光的被测物体图像,根据相机和线激光投射器间的相对位置关系,使用激光三角法计算出激光线上的点在相机坐标系下的坐标。激光三角法原理如下图所示,线激光投射的扇形区域可以看作是一个平面...

weixin_39616379的博客 1074

FlatBuffers学习笔记二——生成二进制流文件

很早之前我已经讲了如何生成表格解析代码点这里,本次讲一下如何将表格数据生成二进制流。 一、添加FlatBuffers插件 如果我们要使用FlatBuffers技术,那么必须向工程中添加FlatBuffers插件,步骤很简单,我们新建一个Unity3D的空工程,然后在Asset目录下新建Plugins文件夹,并且将之前生成的FlatBuffers.dll文件放到此目录下即可。 二、设计数据表格 我们做开发游戏项目时,经常要为策划设计表格,然后由策划...

zhoumf的专栏 2186

AXI 1G/2.5G Ethernet Subsystem IP核使用过程中参数配置全解

AXI 1G/2.5G Ethernet Subsystem 是一个为FPGA设计的以太网子系统,它支持1Gbps和2.5Gbps的数据传输速率,使得FPGA能够直接进行高速以太网通信。这个子系统通常包含以太网MAC控制器、GMII(千兆媒体独立接口)或RGMII(简化GMII)接口、以及可选的PHY(物理层)接口支持。

u011565038的博客 1万+

保姆级教程:用NFS把群晖NAS的文件夹挂到Ubuntu 22.04上,实现文件无缝共享

本文提供了一份详细的教程,指导用户如何通过NFS协议将群晖NAS的文件夹挂载到Ubuntu 22.04系统上,实现文件的无缝共享。文章对比了NFS与SMB协议的性能差异,并提供了群晖端和Ubuntu端的配置指南、高级参数优化、自动挂载方案以及生产环境中的实战技巧,帮助用户提升文件共享效率和系统稳定性。

weixin_29213827的博客 405

FlatBuffers学习笔记一——初识FlatBuffers

一、文件下载 1.下载flatc.exe工具和FlatBuffers源码,链接请点我; 2.用Visual Studio打开源码/net/FlatBuffers/FlatBuffers.csproj项目,编译输出类库文件FlatBuffers.dll; 3.查看官方说明文档请点我; 4.官方C#示例代码可见源码/tests/FlatBuffers.Test工程 二、工具介绍 1....

zhoumf的专栏 7448

点云直线检测-3DLineDetection复现

点云直线分割-Fast 3D line detection

阁楼 8156

Flatbuffers使用解析

Flatbuffers使用解析  在今日头条偶然看到一个技术分享视频,标题很唬人:json之后下一代数据交换格式(大致是这样),不明觉厉,赶紧打开观看,原来Flatbuffers是Google为游戏或者其他对性能要求很高的应用开发的一种数据交换格式。小小试用了下,掌握了基本用法,特此记录,以分享和备忘。

sudao000的博客 1万+

VMware如何安装img镜像,VMware如何安装openwrt软路由(含相关工具镜像)

VMware如何安装img镜像,VMware如何安装openwrt软路由(含相关工具镜像)

XiaoqiangClub的博客 4007

14、脑肿瘤复发预测与转移瘤跟踪的自动化方法

本文介绍两种脑肿瘤相关自动化方法:一种用于预测胶质瘤切除术后的肿瘤复发位置,结合图像配准、静态模型和动态模拟模型,利用患者的DTI数据进行预测;另一种用于在纵向扫描中跟踪转移性脑肿瘤,通过联合求解配准参数估计和图像变化标记问题,提高肿瘤跟踪的准确性和效率。文章同时分析了两种方法的优势与挑战,并提出了未来研究方向,旨在为脑肿瘤的诊断和治疗提供更可靠的工具。

defi6farmer的博客 121

FlatBuffers小试

FlatBuffers相关资料 项目主页:https://github.com/google/flatbuffers 详细介绍:http://google.github.io/flatbuffers/ 据说FlatBuffers(一下简称fb)是一个高效的序列化与反序列化工具,连facebook也用上了它。接下来就看看这个东西到底怎么使用。 项目主页里也没有拎包入住的jar包,up主花了一定时间才

sgwhp的专栏 4573

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

FlatBuffers 的 直接上手C++示例

1、生成scheme文件,即fbs 文件,保存为 flatbuffs_for_zmq.fbs,内容如下 table TransMsg { type:int; content:string; } root_type TransMsg; 2、编译scheme文件 flatc.exe --cpp flatbuffs_for_zmq.fbs 3、编译生成后的文件flatbuf...

huangjiazhi_的博客 3650

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

FlatBuffers初识

FlatBuffers初识 文章目录FlatBuffers初识概述为什么使用FlatBuffers对标ProcotolBuffers、JSON用法概述编译构建定义数据结构schema示例文件:IDL 语法数据类型概述编译schema文件序列化与访问示例文件:Object based API (C++)mutable 变量实现原理性能比较 概述 FlatBuffers一开始是由Google开发用来支持性能高要求的游戏应用的一个开源的序列化工具库,由于其高效性、跨平台,同时支持多语言开发,而后经常被应用在各种传

YfBong的博客 839

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

FlatBuffers CMake配置详解:跨平台编译参数优化

你是否在跨平台项目中遇到过FlatBuffers编译配置混乱、参数优化困难的问题?本文将从基础配置到高级优化,全面解析FlatBuffers的CMake构建系统,帮助你在Windows、Linux和macOS平台上实现高效编译。读完本文,你将掌握:核心编译选项配置、跨平台兼容性处理、编译性能优化技巧以及常见问题解决方案。 ## CMake模块结构解析 FlatBuffers的CMake配置系统...

gitblog_00405的博客 1174

FlatBuffers初探(C#为例)

一. 前言 FlatBuffers相对于ProBuffer的性能差异网上资料很多,这里暂时不做讨论。先用一个简单的例子来讨论简单的FlatBuffers的用法。 二. Schema (IDL, Interface Definition Language) namespace MyGame; enum PhoneType : int { MOBILE = 0, HOME = 1, WO...

andyqingliu的博客 3995

在Android中使用FlatBuffers

总览 先来看一下 FlatBuffers 项目已经为我们提供了什么,而我们在将 FlatBuffers 用到我们的项目中时又需要做什么的整体流程。如下图: :.jpg 在使用 FlatBuffers 时,我们需要以特殊的格式定义我们的结构化数据,保存为 .fbs 文件。FlatBuffers 项目为我们提供了编译器,可用于将 .fbs 文件编译为Java文件,C++文件等,以用于我们的项目。F

tq08g2z的专栏 1971

FlatBuffers的结构和原理

FlatBuffers是一个跨平台的序列化库,支持C++, C#, C, Go, Java, Kotlin, JavaScript, Lobster, Lua, TypeScript, PHP, Python, Rust 和 Swift语言。通常我们可以用FlatBuffers在不同的平台保存和修改配置。

小蚂蚁cc的博客 1211

深入浅出 FlatBuffers 之 Encode

一. FlatBuffers 生成二进制流 FlatBuffers 的使用和 Protocol buffers 基本类似。只不过功能比 Protocol buffers 多了一个解析 JSON 的功能。 编写 schema 文件,描述数据结构和接口定义。 用 flatc 编译,生成相应语言的代码文件。 解析 JSON 数据,把数据存储成对应的 schema,并存入 FlatBuffers 二进制...

sb___itfk的专栏 1489

FlatBuffers性能优化:内存对齐与缓存友好的设计哲学

在现代计算系统中,内存访问效率往往比CPU计算速度更影响整体性能。根据内存墙(Memory Wall)理论,CPU的处理速度已经远远超过了内存访问速度,这使得内存访问成为性能瓶颈。FlatBuffers作为Google开发的高效序列化库,其核心设计哲学正是围绕内存效率和缓存友好性展开的。 > 你还在为序列化/反序列化的性能开销而烦恼吗?本文将深入解析FlatBuffers如何通过内存对齐和缓存优...

gitblog_00566的博客 801

FlatBuffers(概念、原理及优势、在TS中的使用)

本篇文章我们学习 FlatBuffers 概念、其原理、优势及在Vue项目(TS)中的使用。

HuoZhiyan 的博客 1946
上一篇: FlatBuffers学习笔记
下一篇: RxJAVA学习笔记(一)
cbing111
博客等级 码龄12年 5粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值